常用資料庫常用命令使用
SQL 主要分為三種:
• DDL:Data Definition Language,資料定義語言,用來維護儲存資料的結構(資料庫、表),代表指令為create、drop和alter等。
• DML:Data Manipulation Language,資料操作語言,用來對資料進行操作(表中的內容)代表指令為insert、delete和update等,不過在 DML 內部又單獨進行了一個分類,即 DQL(Data Query Language),資料查詢語言,代表指令為select.
• DCL:Data Control Language,資料控制語言,主要是負責(使用者)許可權管理,代表指令為grant和revoke等。
SQL 是關係型資料庫的操作指令,是一種約束,但不強制,類似於 W3C,因此這意味著:不同的資料庫產品(如 Oracle 和 MySQL)內部可能會有一些細微的區別。
在 SQL 中,將資料型別分成了三大類,分別為:數值型、字串型和日期時間型。
Oracle常用命令的使用:(以scott使用者的預設建立的表做測試)
命令圖示:
基本查詢:
/**EMP僱員--DEPT部門--SALGEADE銷售分數**/
select *from emp;
select * from dept;
select * from salgrade;
/**分組和聚合函式一起用**/
select distinct count(*) as empnum from emp group by deptno order by empnum desc;
/**別名查詢(如果有特殊字元用雙引號)和去重查詢**/
select empno " 僱員 編號 ", ename " 僱員 名稱 " from emp;
select distinct deptno from emp;
/**對結果做運算**/
select empno,ename,sal+999 from emp;
select * from emp where not JOB = 'CLERK';
select * from emp where sal in (800,1000,1200,1400,1600,1800);
select * from emp where comm is not null;
select * from emp where comm is null;
select * from emp where sal between 1000 and 2900;
/**模糊查詢**/
select * from emp where ename like '%T_';
/**帶有特殊符號的查詢使用轉義字元,關鍵字指出轉義符號**/
select * from emp where ename like '%\%R%' escape '\';
/**空值處理、空值參與的運算都會導致結果為空**/
select (sal+nvl(comm,0))*12 年薪 from emp where empno = 7369;
select * from emp order by comm desc nulls first;/**空值排在前面**/
select * from emp order by comm desc nulls last;/**空值排在後面**/
/**常用函式--dual 虛表, 意義:補全語法**/
replace,substr,length,||,to_char,to_date,round,trunc,mod,decode,case when,nvl,Coalesce,count,max,min,avg,sum
/**字串的操作**/select substr('你好中國人',0,2) from dual;
select replace('你好中國人','中國','外國') from dual;
select length('abcdefghijklmnopqrstuvwxyz') from dual;
select concat('你好','中國人') from dual;/**或者||**/select '你好' || '中國人' from dual;
/**日期**/
select round(months_between(sysdate,hiredate)/12) from emp;/**round 返回當前值四捨五入後的值**/
select months_between(to_date('1981/1/1','yyyy.mm.dd'),to_date('1978/1/1','yyyy.mm.dd'))from emp;
select*fromempwherehiredate>to_date('1981/1/1','yyyy.mm.dd')and hiredate<to_date('1981/12/31','yyyy.mm.dd')
/**資料處理**//**round四捨五入**/
select round(4.8) from dual;
select round(4.1) from dual;
/**trunc截斷,捨棄小數部分**/
select trunc(3.141592654) from dual;
/**ceil向上取整**/
select ceil(3.15) from dual;
/**floor向下取整**/
select floor(3.9898) from dual;
/**絕對值**/
select abs(-56.5) from dual;
/**取餘**/
select mod(25,4) from dual;
/**轉換函式,orable不提供日期和字串的自動轉化**/
select to_char(sysdate) from dual;
select to_date('2018/3/20','yyyy,mm.dd') from dual;
select to_number('12315') from dual;
/**通用函式**/
select concat('123','456') from dual;
/**nvl--第一個值不為空取之,若為空,則取第二個**/
select nvl(1,null) from dual;
/**nullif--相等則為null,否則取第一個**/
select nullif(4,1) from dual;
/**nvl2--如果第一個不為空則選擇第二個,否則選擇第三個**/
select nvl2(1,2,3) from dual;
/**coalesce--返回第一個不為空的值**/
select coalesce(null,null,null,9,null,8) from dual;
/**條件表示式**/
select * from emp;
select ename,(case job when 'CLERK' then '文員'
when 'SALESMAN' then '銷售員'
when 'MANAGER' then '管理員'
else '其他' end) from emp;
/**decode--特有關鍵字**/
select decode(job,'CLERK','文員','SALESMAN','銷售員','MANAGER','管理員') from emp;
/**多行函式**/
--分組函式
--(where與having區別
/**where 是在from後面, 在group by 前。where 過濾的是物理表(from)中的資料,先過濾再分組
having 是在group by 後面, 過濾分組後的資料**/
select * from emp;
select deptno,count(1) from emp group by deptno;
select deptno,count(1) from emp group by deptno having deptno = 10;
--聚合函式
--count,max,min,avg,sum
select count(1) from emp;
select max(sal) from emp;
select min(sal) from emp;
select avg(sal) from emp;
select sum(comm) from emp;
/**練習**/
select * from emp;
select ename
/**-----------------------------------------**/
--部門員工數量大於三
select count(1) from emp group by deptno having count(1)>3;
select * from emp
select e1.empno,e1.ename,e1.hiredate from emp e1,emp e2 where e1.empno = e2.mgr
/**內連線查詢**/
--隱式內連線(僱傭表和部門表)
select * from emp e,dept d where e.deptno = d.deptno;
--顯式內連線
select * from emp e join dept d on e.deptno = d.deptno;
/**外連線**/
--左外連線
select * from emp e left outer join dept d on e.deptno = d.deptno;
select * from dept;select * from emp;
--右外連線
select * from emp e right outer join dept d on d.deptno = e.deptno;
--Orable外連線(+號連線的是外表)
select * from emp e,dept d where e.deptno = d.deptno(+);
select * from emp e,dept d where e.deptno(+) = d.deptno;
/**自關聯**/
select e.empno,e.ename,e.mgr,m.ename from emp e, emp m where e.mgr = m.empno;
/**子查詢**/
select * from emp where sal = (select max(sal) from emp);
select * from emp where sal>(select sal from emp where empno = 7654) and job = (select job from emp where empno = 7788) and empno <> 7788;
select * from (select deptno,min(sal) from emp group by deptno) e,dept where e.deptno = dept.deptno
/**多行子查詢**/
select * from emp where empno in (select distinct mgr from emp);
select * from emp where empno not in (select distinct mgr from emp where mgr is not null);
/**exists**/
select * from emp where exists(select * from emp where emp.deptno = 10);
select avg(sal) from emp e where e.deptno = (select min(deptno) from emp)
/**集合**/
--union
--union all
--row是一個偽列,rowid是資料儲存的實體地址
select rownum,rowid,ename from emp;
--找出工資表中工資最高的前三名
select rownum,ename,sal from emp order by sal desc;
--要先按照降序排序後再使用偽列生成的序號進行顯示
select rownum,ename,sal from (select ename,sal from emp order by sal desc) where rownum<=3;
select rownum,t.* from (select ename,sal from emp order by sal desc) t where rownum<=3;
/**Oracle的分頁補充:
查詢員工表中的第5條記錄到第10條記錄.
<=5 and >=10
*/
--rownum--每當按照條件查詢出一條記錄,則當前rownum+1生成對應的序號加到當前記錄上,但是如果當前沒有查詢出滿足條件的結果時,rownum當然不會自動增長了.rownum從1開始
select * from ( select rownum rn,e.* from emp e where rownum<=10) t where t.rn>=5;
/**找出員工表中薪水大於本部門平均薪水的員工資訊
分析:部門的平均薪水
*/
select * from emp e where e.sal>(select avg(sal) from emp);
/**
統計每年入職員工的個數
分析:算出年 to_char(hiredate,'yyyy')
count, 按年分組
*/
select to_char(hiredate,'yyyy') 年份,count(to_char(hiredate,'yyyy')) 數量 from emp group by to_char(hiredate,'yyyy') order by 年份;
--(EXTRACT:擷取日期型別對應的部分)語法如下:
--EXTRACT (
-- { YEAR | MONTH | DAY | HOUR | MINUTE | SECOND }
-- | { TIMEZONE_HOUR | TIMEZONE_MINUTE }
-- | { TIMEZONE_REGION | TIMEZONE_ABBR }
select extract(year from hiredate ) 年份,count(extract (year from hiredate)) 數量 from emp group by extract(year from hiredate) order by 年份;
select extract(year from hiredate ) 年份,count(1) 數量 from emp group by extract(year from hiredate) order by 年份;
--行列互換--(重要)
select
sum(decode(t.y,'1980',t.c,0)) "1980",
sum(decode(t.y,'1981',t.c,0)) "1981",
sum(decode(t.y,'1982',t.c,0)) "1982",
sum(decode(t.y,'1987',t.c,0)) "1987",
count(1) total from
(select extract(year from hiredate ) y,count(1) c from emp group by extract(year from hiredate) order by y) t;
--集合的運算(並、交、差)
/**select後面的列的型別,順序必須一致
運用場景:多張表的結果集合運算
並集: union 去重複
union all 所有
交集: intersect
差集: minus
**/
select * from emp union select * from emp;
select * from emp union all select * from emp;
--工資大於1500,或者是20部門下的員工select * from emp where sal>1500 or deptno = 20;
select * from emp where sal>1500union
select * from emp where deptno = 20;
控制語句:
--建立表空間
create tablespace yang
datafile 'c:\yang.dbf'
size 50M
autoextend on
next 10M ;
--給使用者設定建立的表空間
alter user yanghao identified by yanghao default tablespace yang;
--檢視使用者的表空間
select username, default_tablespace from user_users;
--建立一張使用者賬號表
create table counts (id number(10) primary key,username varchar2(20),password varchar2(20),description clob);
--刪除表
drop table counts;
--插入資料
insert into counts values(1,'1','hahaha1','good1 ideas');
insert into counts values(2,'2','hahaha2','good2 ideas');
insert into counts values(3,'3','hahaha3','good3 ideas');
insert into counts values(4,'4','hahaha4','good4 ideas');
insert into counts values(5,'5','hahaha5','good5 ideas');
insert into counts values(6,'6','hahaha6','good6 ideas');
--查看錶資料
select * from counts;
--建立當前操作的一個儲存點(方便回滾到固定的儲存狀態)
savepoint a_point;
rollback to a_point;
commit;
--建立一個counts表的試圖,只顯示當前1~3標號的使用者
create or replace view count_view as
select * from counts where id<=3 with read only;
--檢視當前的檢視
select * from count_view;
--事務
--4個特性(ACID)
--A: 原子性, 不可再分割
--C: 一致性,要麼成功,要麼失敗
--I: 隔離性 (髒讀,不可重複讀(update),虛/幻讀(insert,delete))
--D: 持久化性, 事務一旦提交,就會儲存到磁碟中
--MySql支援的事務級別有哪些?
-可重複讀(Repeatable Read,預設),提交讀(Read Committed),序列化(Serializable), 未提交讀(Read Uncommmited)
--Oracle支援的事務級別
-- Read Committed(預設), Serializable, read only
--序列資料庫提供一種數值型別,且按一定規則自動增長的序號 場景:需要自動增長主鍵,或需要自動增長的序號--建立自定義的序列
create sequence incre_key
start with 1
minValue 1
maxValue 10
cycle
increment by 1
cache 3
--使用序列(在一次session累加)
create table test(testId number(10),name varchar2(10));
insert into test values(incre_key.nextval,'haha');
select incre_key.currval from dual;
drop table test;
/**
索引
是什麼? 一組資料庫已經算好了的資料結構
作用: 提交查詢效率,缺點:插入與刪除的效率會降低
使用 create index 名稱 on table(列名,...), bitmap, btree
如果有多個列,就叫複合索引(索引的列必須都用上時,索引才生效)
一個表最多不要超過5個索引
*/
--索引的使用
--1. 資料量大的表
--2. 經常執行表更新的操作(insert,update,delete), 不適合索引
--3. 索引的列不要出現空值
--4. 經常查詢條件的列或排序的列可以建索引
--索引的失效:
-- not, in, is not, is null
select * from stu where sname='學生第1學生';--9.860
--建立索引
create index index_stu_sname on stu(sname);
--再查詢一次當前的資料時間減少
select * from stu where sname='學生第2學生';--0
/**
觸發器: 它是一段寫好的plsql語句
行級:影響了多少條記錄,就觸發多少次
語句:不影響了多少記錄,只觸發一次
create or replace trigger
before|after
on insert|update|delete
for each row --代行級
begin
--程式碼
end;
作用: 記錄日誌,同步資料
*/
create or replace trigger pre_insert
before
insert on counts
begin
raise_application_error(-20111,'週三不能插入員工資訊');
end;
insert into counts values(88,'test','test','test');
/**移除觸發器**/
drop trigger pre_insert;
/**
同義詞:
reate synonym 名字 for 表
作用: 簡化編寫,遮蔽表名的含義, 資料庫同步ETL
*/
select * from user_tables;
create synonym students for stu;
select * from students;
select * from counts;
儲存結構、資料庫程式設計:
/**pl/sql程式設計**/
declare
i number(10):=incre_key.nextVal;
name counts.username%type;
psd counts.password%type;
begin
name:='test';
psd:='test'
insert into counts values(i,name,psd,'test');
commit;
dbms_output.put_line('name: '||test||'psd: 'psd);
end;
/**遊標的使用**/
--使用遊標輸出emp表中的員工編號和姓名
declare
cursor pc is select * from scott.emp;--遊標(返回整個emp表的資料)
pemp scott.emp%rowtype;
begin
open pc;--開啟遊標
loop
fetch pc --呼叫一次遊標
into pemp; --把遊標當前行的結果存到變數pemp中
dbms_output.put_line(pemp.empno||' '||pemp.ename);
exit when pc%notfound;
end loop;
close pc;--關閉遊標
end;
/**例外/異常**/
declare
pnum number;
pnum2 varchar(10);
begin
pnum:=1/0;
exception
when zero_divide then
dbms_output.put_line('除零異常');
when value_error then
dbms_output.put_line('數值轉換異常');
when others then
dbms_output.put_line('其他異常');
end;
相關推薦
常用資料庫常用命令使用
SQL:Structured Query Language,結構化查詢語言(資料以查詢為主,99% 都是在進行查詢操作)。SQL 主要分為三種:• DDL:Data Definition Language,資料定義語言,用來維護儲存資料的結構(資料庫、表),代表指令為crea
MySQL資料庫常用操作命令二
接上一篇的操作: 1.查詢相反條件:select 查詢欄位 from 表名 where not (查詢條件); 2.範圍查詢:
MySQL資料庫常用命令大全
常用命令大全(持續更新) show databases;顯示所有資料庫
資料庫常用命令(部分)
1、建立資料庫 CREATE DATABASE 資料庫名; 2、刪除資料庫 drop database 資料庫名; 3、從命令提示視窗中選擇MySQL資料庫 use 資料庫名; 4、MySQL 建立資料表 CREATE TABLE table_name(表名) (column_name
瞭解SQLPLUS連線資料庫的方法 ,掌握SQLPLUS設定環境變數的操作方法 ,掌握利用SQLPLUS格式化查詢結果的方法 ,掌握常用的SQLPLUS命令,掌握在SQLPLUS編寫及運
撰寫人——軟工二班——陳喜平 – 實驗步驟: – 1、利用SQLPLUS連線oracle資料庫 sqlplus s16436220/[email protected] – 2、設定SQLPLUS的環境變數 – pagesize – linesize show p
Ubuntu下資料庫常用命令
登入MySQL $ sudo mysql -u root -p 列舉所有的資料庫 mysql> show databases; (*分號) 建立名叫database_name的資料庫 mysql> create database database_name; 進入某一個數據庫
MongoDB資料庫常用命令
1、檢視命令提示 db.help(); 2、切換/建立資料庫 use mydb01; 切換到mydb的資料庫,如果該資料庫不存在,則自動建立。 MongoDB中預設的資料庫為test,如果你沒有建立新的資料庫就會執行集合或者文件操作,資料將存放在
mysql資料庫常用命令(一)
– 資料庫的操作 -- 連結資料庫 mysql -uroot -p mysql -uroot -pmysql -- 退出資料庫 exit/quit/ctrl+d -- sql語句最後需要有分號;結尾 -- 顯示資料庫版本 select version()
Linux下操作MySQL資料庫常用命令
目錄 5.查詢表 9.退出 1.連線資料庫 mysql -u -root -p 輸入密碼 2.檢視資料庫 show databases; 3.開啟資料庫
mysql資料庫常用的一些基本命令
安裝 yum - y install mysql-servse 啟動mysql服務 service mysqld start 執行埠為3306 登陸 mysql -uroot 語法 :mysql -u賬號 -p密碼 預設是空密碼 庫和表 層次關係 庫--&
Redis資料庫常用命令
Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。 Redis 是一個高效能的key-value資料庫。Redis的出現,很大程度補償了memcached這類key/value儲存的不
MYSQL資料庫常用命令
MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 最流行的關係型資料庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management
SQL資料庫常用命令
建立資料庫 create database student;//建立一個名為student的資料庫 建立資料庫的表 create table student //定義一個名為student的表 ( sno char(9) primary key, sname cha
MongoDB建立表步驟,Mongo常用的資料庫操作命令,查詢,新增,更新,刪除_MongoDB 效能監測
->use Admin (切換到建立使用者) ->db.TestDb (建立資料庫) ->db.addUser(“userName”,”Pwd”) 建立使用者 ->db.auth(“userName”,
MongoDB資料庫常用操作命令
常用操作 檢視幫助 db.help() 當前資料庫的版本 db.version() 當前使用的資料庫 db.getName() 當前資料庫的狀態 db.stats() 當前資料庫的地址 db.getMongo() 查詢錯誤資訊
mysql常用的一些命令,用於檢視資料庫、表、欄位編碼
1.檢視資料庫支援的所有字符集 show character set;或show char set; 2.檢視當前狀態 裡面包括當然的字符集設定 status或者\s 3.檢視系統字符集設定,包括所有的字符集設定 show variables like 'char%'; 4.檢視資料表中字符集設定 show
資料庫常用操作命令語句
關於DOS命令: 進入命令提示符控制檯CMD,命令:打了一個字串通過回車讓計算機去執行一定的操作; 進入碟符,D: 、C: 進入到目錄 cd ,跟的目錄名稱是可以使用萬用字元*,比如要進入 d:/mydocument ,可以通過命令cd mydoc* 返回上級目錄 cd… 列式目錄 dir
常用oracle資料庫查詢命令
(1)Select * from tables(表名);//查詢表tables的內容 (2)Truncate table tables(表名);//清除表內資料;但保留格式 (3)Select ID(列名)from tables groupby ID(列名)、ID2(
Windows下還原Oracle資料庫常用命令
Windows環境下使用命令的方式還原資料庫: 1 win+R 進入DOS環境; 2 sqlplus /nolog 進入Oracle命令環境 3 conn /as sysdba
Sybase資料庫常用命令
一、Sybase資料庫簡介 1.版本 1984年,Mark B. Hiffman和Robert Epstern建立了Sybase公司,並在1987年推出了Sybase資料庫產品。SYBASE主要有三種版本,一是UNIX作業系統下執行的版本,二是Novell Netware環