sql腳本分享
鏈接: https://pan.baidu.com/s/1ckA70v0CgSFecKhAKiu1cA
提取碼: 76th
1,sql载碌、DB岩四、DBMS分別是什么,他們之間的關(guān)系晕讲?
DB:DataBase(數(shù)據(jù)庫组橄,數(shù)據(jù)庫實際上在硬盤上以文件的形式存在)
DBMS:DataBase Management System(數(shù)據(jù)庫管理系統(tǒng)衣吠,常見的有:MySQL、Oracle小压、DB2线梗、Sybase、SQLServer...)
SQL:結(jié)構(gòu)化查詢語言(高級語言)怠益,是一門標準的通用的語言仪搔;標準的sql適合于所有的數(shù)據(jù)庫產(chǎn)品。
SQL語句在執(zhí)行的時候溉痢,實際上內(nèi)部也會先進行編譯僻造,然后再執(zhí)行sql。(sql語句的編譯由DBMS完成孩饼。)
DBMS負責執(zhí)行sql語句髓削,通過執(zhí)行sql語句來操作DB當中的數(shù)據(jù)。
DBMS - (執(zhí)行)-> SQL -(操作)-> DB
2镀娶,什么是表立膛?
表:table; table是數(shù)據(jù)庫的基本組成單元,所有的數(shù)據(jù)都以表格的形式組織,目的是可讀性強宝泵。
一個表包括行和列:
行:被稱為數(shù)據(jù)/記錄(data)
列:被稱為字段(column)
字段包含的屬性:字段名好啰、數(shù)據(jù)類型、相關(guān)的約束儿奶。
3框往,學(xué)習(xí)MySQL主要還是學(xué)習(xí)通用的SQL語句,SQL語句的分類:
DQL(數(shù)據(jù)查詢語言):查詢語句闯捎,凡是select語句都是DQL椰弊。
DML(數(shù)據(jù)操作語言):insert delete update,對表當中的數(shù)據(jù)進行增刪改瓤鼻。
DDL(數(shù)據(jù)定義語言):create drop alter秉版,對表結(jié)構(gòu)的增刪改。
TCL(事務(wù)控制語言):commit提交事務(wù)茬祷,rollback回滾事務(wù)清焕。(TCL中的T是Transaction)
DCL(數(shù)據(jù)控制語言):grant授權(quán)、revoke撤銷權(quán)限等祭犯。
4秸妥,導(dǎo)入數(shù)據(jù)
第一步:登錄mysql數(shù)據(jù)庫管理系統(tǒng)
本地登錄$:mysql -uroot -p
遠程登錄$:mysql -hIP地址 -uroot -p
第二步:查看有哪些數(shù)據(jù)庫
mysql> show databases;(這個不是SQL語句,屬于MySQL的命令)
第三步:創(chuàng)建屬于我們自己的數(shù)據(jù)庫
mysql> create database sqltest;
第四步:使用sqltest數(shù)據(jù)庫
mysql> use sqltest;
第五步:查看當前使用的數(shù)據(jù)庫中有哪些表盹憎?
mysql> show tables;
第六步:初始化數(shù)據(jù)(source 路徑)
mysql> source /Users/a1/Desktop/Java/Simon_JavaSE/數(shù)據(jù)庫/腳本文件/bjpowernode.sql
注意:看到這里如果沒有sql腳本進行學(xué)習(xí)筛峭,可返回頂部[sql腳本分享]進行下載.
5铐刘,sqltest.sql這個文件以.sql結(jié)尾陪每,這樣的文件被稱為“sql腳本”。當一個文件的擴展名是.sql镰吵,并且該文件中編寫了大量的sql語句檩禾,我們稱為這樣的文件為sql腳本。注意:直接使用source命令可以執(zhí)行sql腳本疤祭,sql腳本中的數(shù)量太大的時候盼产,無法打開;請使用source命令完成初始化勺馆。
6戏售,刪除數(shù)據(jù)庫:(drop database 數(shù)據(jù)庫名稱;)
mysql> drop database sqltest;
7,查看表結(jié)構(gòu):(dese 表名;)
mysql> desc dept;
8草穆,表中的數(shù)據(jù)
mysql> select * from emp;
9灌灾,常用命令
查看當前使用的數(shù)據(jù)庫
mysql> select database();
查看mysql版本號
mysql> select version();
終止一條語句
mysql> \c
退出mysql
mysql> exit
10,查看創(chuàng)建表的語句:(show create table 表名;)
mysql> show create table emp;
11悲柱,簡單的查詢語句(DQL)
語法結(jié)構(gòu):
select 字段1,字段2,字段3,... from 表名;
提示:1锋喜,任何一條sql語句都是以";"結(jié)尾。2,sql語句不區(qū)分大小寫嘿般。
查詢員工年薪(字段可以參與數(shù)學(xué)預(yù)算):
mysql> select ename , sal * 12 from emp;
給查詢結(jié)果的列重命名:
mysql> select ename , sal * 12 as yearsal from emp;
mysql> select ename , sal * 12 as '年薪' from emp;
注意:標準的sql語句中要求字符串使用單引號括起來段标。雖然mysql支持雙引號,盡量別用炉奴。
12逼庞,條件查詢
1,語法結(jié)構(gòu):
select 字段1,字段2,字段3,...
from 表名
where 條件;
執(zhí)行順序:先from瞻赶,然后where往堡,最后select
2,查詢SMITH的工資
mysql> select sal from emp where ename = 'SMITH';
3共耍,查詢工資等于(大于虑灰、小于等于)3000的員工
mysql> select ename , sal from emp where sal = 3000;
mysql> select ename , sal from emp where sal > 3000;
mysql> select ename , sal from emp where sal <= 3000;
4,查詢工資不等于3000的員工
mysql> select ename , sal from emp where sal <> 3000;
mysql> select ename , sal from emp where sal != 3000;
5痹兜,查詢工資在1100和3000之間的員工穆咐,包括1100和3000
mysql> select ename , sal from emp where sal >= 1100 and sal <= 3000;
mysql> select ename , sal from emp where sal between 1100 and 3000; // between...and... 是閉區(qū)間,左小右大字旭。
between...and... 使用的時候必須左小有大对湃。
between...and... 除了可以使用在數(shù)字方面之后,還可以使用在字符串方面
mysql> select ename , sal from emp where ename between 'a' and 'd'; // 左閉右開遗淳。
6拍柒,找出哪些人沒有津貼?
mysql> select ename ,sal,comm from emp where comm = 0 or comm is null;
在數(shù)據(jù)庫中NULL不是一個值屈暗,代表什么也沒有拆讯,為空⊙眩空不是一個值种呐,不能用等號衡量。
必須使用 is null 或者is not null
mysql> select ename ,sal,comm from emp where comm is null;
mysql> select ename ,sal,comm from emp where comm is not null;
7弃甥,找出工作崗位是MANAGER和SALESMAN的員工爽室?
mysql> select ename ,job from emp where job = 'MANAGER' or job = 'SALESMAN';
in等同于or
mysql> select ename ,job from emp where job in ( 'MANAGER' , 'SALESMAN');
mysql> select ename , sal from emp where sal in (1100 , 3000); // in后面的值不是區(qū)間,是具體的值淆攻。
not in:不在這個幾個值當中
mysql> select ename , sal from emp where not sal in (1100 , 1600 ,3000);
8阔墩,找出薪資大于1000并且部門編號是20或30的部門好員工(and和or聯(lián)合使用)
mysql> select ename ,sal ,DEPTNO from emp where sal > 1000 and (DEPTNO = 20 or DEPTNO = 30);
注意:當運算符的優(yōu)先級不確定的時候加小括號。
模糊查詢like: 找出名字當中含有o的瓶珊?
(在模糊查詢當中啸箫,必須掌握兩個特殊符號:1,'%'代表任意多個字符艰毒;2筐高,'_'代表任意1個字符。)
mysql> select ename from emp where ename like '%o%' ;
找出第二個字母是A的名字?
mysql> select ename from emp where ename like '_a%';
找出名字中有下劃線的( 斜杠具有轉(zhuǎn)譯作用)?
mysql> select ename from emp where ename like '%\_%';
13柑土,排序order by(升序蜀肘、降序)
1,按照工資升序稽屏,找出員工名和薪資
mysql> select ename,sal from emp order by sal;
mysql> select ename,sal from emp order by sal asc;
2扮宠,工資升序:
mysql> select ename,sal from emp order by sal desc;
3,注意:默認是升序狐榔,asc表示升序坛增,desc表示降序。
4薄腻,按照工資的降序排列收捣,當工資相同的時候再按照名字的升序排列。
mysql> select ename,sal from emp order by sal desc , ename asc;
注意:越靠前的字段越能起到主導(dǎo)作用庵楷,只有當前面的字段無法完成排序的時候罢艾,才會啟用后面的字段。
找出工作崗位是SALESMAN的員工尽纽,并且要求按照薪資的降序排序
mysql> select ename,sal,job from emp where job = 'SALESMAN' order by sal desc;
14咐蚯,分組函數(shù):多行處理函數(shù)(輸入多行,最終輸入一行)
count:計數(shù)弄贿;sum:求和春锋;avg:平均值;max:最大值差凹;min:最小值期奔。
所有的分組函數(shù)都是對“某一組”數(shù)據(jù)進行操作的。
分組函數(shù)自動忽略NULL直奋。
SQL語句語法規(guī)則:分組函數(shù)不可直接使用在where字句當中能庆。
count(*)和count(具體的某個字段),他們有什么區(qū)別脚线?
count(*):不是統(tǒng)計某個字段中數(shù)據(jù)的個數(shù),而是統(tǒng)計總記錄條數(shù)弥搞。
count(具體的某個字段):表示統(tǒng)計某個字段中不為NULL的數(shù)據(jù)總數(shù)量邮绿。
找出工資總和:
mysql> select sum(sal) from emp;
找出最高、最低工資:
mysql> select max(sal) from emp;
mysql> select min(sal) from emp;
找出平均工資:
mysql> select avg(sal) from emp;
找出總?cè)藬?shù):
mysql> select count(ename) from emp;
分組函數(shù)自動忽略NULL
mysql> select count(comm) from emp;
找出工資高于平均工資的員工
錯誤寫法:
mysql> select ename,sal from emp where sal > avg(sal); // ERROR 1111 (HY000): Invalid use of group function
正確寫法:
mysql> select ename,sal from emp where sal > (select avg(sal) from emp);
分組函數(shù)不可直接使用在where字句當中攀例。
分組函數(shù)一般都會和group by聯(lián)合使用船逮;分組函數(shù)都是在group by語句執(zhí)行結(jié)束之后才會執(zhí)行。
因為group by是在where執(zhí)行之后才會執(zhí)行的粤铭。
分組函數(shù)也能組合起來用:
mysql> select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp;
15挖胃,單行處理函數(shù):輸入一行,輸出一行。
計算每個員工的年薪(包含津貼)
mysql> select ename, (sal + comm) * 12 as yearsal from emp;
重點:所有的數(shù)據(jù)庫規(guī)定:只要有NULL參與的運算結(jié)果一定是NULL酱鸭。
ifnull()空處理函數(shù):ifnull(可能為NULL的數(shù)據(jù)吗垮,被當做什么處理),屬于單行處理函數(shù)
mysql> select ename, (sal + ifnull(comm,0)) * 12 as yearsal from emp;
16,group by 和 having
group by :按照某個字段或者某些字段進行分組凹髓。
having :是對分組之后的數(shù)據(jù)進行再次過濾烁登。
分組函數(shù)一般都會和group by聯(lián)合使用;分組函數(shù)都是在group by語句執(zhí)行結(jié)束之后才會執(zhí)行蔚舀。
找出每個工作崗位的最高薪資:
mysql> select job, max(sal) from emp group by job;
找出每個工作崗位的平均薪資:
mysql> select job, avg(sal) from emp group by job;
多個字段聯(lián)合起來一塊分組
找出每個部門不同工作崗位的最高薪資饵沧。
mysql> select DEPTNO,job, max(sal) from emp group by DEPTNO , job ;
mysql> select DEPTNO,job, max(sal) from emp group by DEPTNO , job order by DEPTNO desc; // 按DEPTNO降序排
找出每個部門的最高薪資,顯示薪資大于2900赌躺。
mysql> select DEPTNO, max(sal) from emp group by DEPTNO having max(sal) > 2900; // 效率低
mysql> select DEPTNO, max(sal) from emp where sal > 2900 group by DEPTNO; // 效率高 建議能使用where就使用where
找出每個部門的平均薪資狼牺,顯示薪資大于2000。
mysql> select DEPTNO, avg(sal) from emp group by DEPTNO having avg(sal) > 2000; // 效率低
17礼患,總結(jié)一個完整的DQL語句
select 5
..
from 1
..
where 2
..
group by 3
..
having 4
..
order by 6
..