史上超強(qiáng)最常用SQL語(yǔ)句大全
DDL(Data Definition Language)數(shù)據(jù)定義語(yǔ)言
一、操作庫(kù)
-- 創(chuàng)建庫(kù) create database db1; -- 創(chuàng)建庫(kù)是否存在,不存在則創(chuàng)建 create database if not exists db1; -- 查看所有數(shù)據(jù)庫(kù) show databases; -- 查看某個(gè)數(shù)據(jù)庫(kù)的定義信息 show create database db1; -- 修改數(shù)據(jù)庫(kù)字符信息 alter database db1 character set utf8; -- 刪除數(shù)據(jù)庫(kù) drop database db1;
二、操作表
--創(chuàng)建表 create table student( id int, name varchar(32), age int , score double(4,1), birthday date, insert_time timestamp ); -- 查看表結(jié)構(gòu) desc 表名; -- 查看創(chuàng)建表的SQL語(yǔ)句 show create table 表名; -- 修改表名 alter table 表名 rename to 新的表名; -- 添加一列 alter table 表名 add 列名 數(shù)據(jù)類型; -- 刪除列 alter table 表名 drop 列名; -- 刪除表 drop table 表名; drop table if exists 表名 ;
DML(Data Manipulation Language)數(shù)據(jù)操作語(yǔ)言
一、增加 insert into
-- 寫全所有列名 insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n); -- 不寫列名(所有列全部添加) insert into 表名 values(值1,值2,...值n); -- 插入部分?jǐn)?shù)據(jù) insert into 表名(列名1,列名2) values(值1,值2);
二、刪除 delete
-- 刪除表中數(shù)據(jù) delete from 表名 where 列名 = 值; -- 刪除表中所有數(shù)據(jù) delete from 表名; -- 刪除表中所有數(shù)據(jù)(高效 先刪除表,然后再創(chuàng)建一張一樣的表。) truncate table 表名;
三、修改 update
-- 不帶條件的修改(會(huì)修改所有行) update 表名 set 列名 = 值; -- 帶條件的修改 update 表名 set 列名 = 值 where 列名=值;
DQL(Data Query Language)數(shù)據(jù)查詢語(yǔ)言
關(guān)于查詢語(yǔ)句有很多,這里基礎(chǔ)的不再介紹。主要介紹排序查詢、聚合函數(shù)、模糊查詢、分組查詢、分頁(yè)查詢、內(nèi)連接、外連接、子查詢
一、基礎(chǔ)關(guān)鍵字
BETWEEN...AND (在什么之間)和 IN( 集合)
-- 查詢年齡大于等于20 小于等于30 SELECT * FROM student WHERE age >= 20 && age <=30; SELECT * FROM student WHERE age >= 20 AND age <=30; SELECT * FROM student WHERE age BETWEEN 20 AND 30; -- 查詢年齡22歲,18歲,25歲的信息 SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25 SELECT * FROM student WHERE age IN (22,18,25);
is null(不為null值) 與 like(模糊查詢)、distinct(去除重復(fù)值)
-- 查詢英語(yǔ)成績(jī)不為null SELECT * FROM student WHERE english IS NOT NULL; _:單個(gè)任意字符 %:多個(gè)任意字符 -- 查詢姓馬的有哪些? like SELECT * FROM student WHERE NAME LIKE '馬%'; -- 查詢姓名第二個(gè)字是化的人 SELECT * FROM student WHERE NAME LIKE "_化%"; -- 查詢姓名是3個(gè)字的人 SELECT * FROM student WHERE NAME LIKE '___'; -- 查詢姓名中包含德的人 SELECT * FROM student WHERE NAME LIKE '%德%'; -- 關(guān)鍵詞 DISTINCT 用于返回唯一不同的值。 -- 語(yǔ)法:SELECT DISTINCT 列名稱 FROM 表名稱 SELECT DISTINCT NAME FROM student ;
二、排序查詢 order by
語(yǔ)法:order by 子句
order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
注意:
如果有多個(gè)排序條件,則當(dāng)前邊的條件值一樣時(shí),才會(huì)判斷第二條件。
-- 例子 SELECT * FROM person ORDER BY math; --默認(rèn)升序 SELECT * FROM person ORDER BY math desc; --降序
三、 聚合函數(shù):將一列數(shù)據(jù)作為一個(gè)整體,進(jìn)行縱向的計(jì)算。
1.count:計(jì)算個(gè)數(shù)
2.max:計(jì)算最大值
3.min:計(jì)算最小值
4.sum:計(jì)算和
5.avg:計(jì)算平均數(shù)
四、 分組查詢 grout by
語(yǔ)法:group by 分組字段;
注意:分組之后查詢的字段:分組字段、聚合函數(shù)
-- 按照性別分組。分別查詢男、女同學(xué)的平均分 SELECT sex , AVG(math) FROM student GROUP BY sex; -- 按照性別分組。分別查詢男、女同學(xué)的平均分,人數(shù) SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex; -- 按照性別分組。分別查詢男、女同學(xué)的平均分,人數(shù) 要求:分?jǐn)?shù)低于70分的人,不參與分組 SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex; -- 按照性別分組。分別查詢男、女同學(xué)的平均分,人數(shù) 要求:分?jǐn)?shù)低于70分的人,不參與分組,分組之后。人數(shù)要大于2個(gè)人 SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2; SELECT sex , AVG(math),COUNT(id) 人數(shù) FROM student WHERE math > 70 GROUP BY sex HAVING 人數(shù) > 2;
五、 分頁(yè)查詢
1. 語(yǔ)法:limit 開始的索引,每頁(yè)查詢的條數(shù);
2. 公式:開始的索引 = (當(dāng)前的頁(yè)碼 - 1) * 每頁(yè)顯示的條數(shù)
3. limit 是一個(gè)MySQL"方言"
-- 每頁(yè)顯示3條記錄 SELECT * FROM student LIMIT 0,3; -- 第1頁(yè) SELECT * FROM student LIMIT 3,3; -- 第2頁(yè) SELECT * FROM student LIMIT 6,3; -- 第3頁(yè)
六、內(nèi)連接查詢:
1. 從哪些表中查詢數(shù)據(jù)
2.條件是什么
3. 查詢哪些字段
1.隱式內(nèi)連接:使用where條件消除無(wú)用數(shù)據(jù)
-- 查詢員工表的名稱,性別。部門表的名稱 SELECT emp.name,emp.gender,dept.name FROM emp,dept WHERE emp.`dept_id` = dept.`id`; SELECT t1.name, -- 員工表的姓名 t1.gender,-- 員工表的性別 t2.name -- 部門表的名稱 FROM emp t1, dept t2 WHERE t1.`dept_id` = t2.`id`;
2.顯式內(nèi)連接
-- 語(yǔ)法: select 字段列表 from 表名1 [inner] join 表名2 on 條件 -- 例如: SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`; SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;
七、外連接查詢
1.左外連接 -- 查詢的是左表所有數(shù)據(jù)以及其交集部分。
-- 語(yǔ)法:select 字段列表 from 表1 left [outer] join 表2 on 條件; -- 例子: -- 查詢所有員工信息,如果員工有部門,則查詢部門名稱,沒有部門,則不顯示部門名稱 SELECT t1.*,t2.`name` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2.`id`;
2.右外連接 -- 查詢的是右表所有數(shù)據(jù)以及其交集部分。
-- 語(yǔ)法: select 字段列表 from 表1 right [outer] join 表2 on 條件; -- 例子: SELECT * FROM dept t2 RIGHT JOIN emp t1 ON t1.`dept_id` = t2.`id`;
八、子查詢:查詢中嵌套查詢
-- 查詢工資最高的員工信息 -- 1 查詢最高的工資是多少 9000 SELECT MAX(salary) FROM emp; -- 2 查詢員工信息,并且工資等于9000的 SELECT * FROM emp WHERE emp.`salary` = 9000; -- 一條sql就完成這個(gè)操作。這就是子查詢 SELECT * FROM emp WHERE emp.`salary` = (SELECT MAX(salary) FROM emp);
1.子查詢的結(jié)果是單行單列的
子查詢可以作為條件,使用運(yùn)算符去判斷。 運(yùn)算符: > >= < <= =
-- 查詢員工工資小于平均工資的人 SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);
2. 子查詢的結(jié)果是多行單列的:
子查詢可以作為條件,使用運(yùn)算符in來(lái)判斷
-- 查詢'財(cái)務(wù)部'和'市場(chǎng)部'所有的員工信息 SELECT id FROM dept WHERE NAME = '財(cái)務(wù)部' OR NAME = '市場(chǎng)部'; SELECT * FROM emp WHERE dept_id = 3 OR dept_id = 2; -- 子查詢 SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '財(cái)務(wù)部' OR NAME = '市場(chǎng)部');
3. 子查詢的結(jié)果是多行多列的:
子查詢可以作為一張虛擬表參與查詢
-- 查詢員工入職日期是2011-11-11日之后的員工信息和部門信息 -- 子查詢 SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.`join_date` > '2011-11-11') t2 WHERE t1.id = t2.dept_id; -- 普通內(nèi)連接 SELECT * FROM emp t1,dept t2 WHERE t1.`dept_id` = t2.`id` AND t1.`join_date` > '2011-11-11'
DCL(Data Control Language)數(shù)據(jù)控制語(yǔ)言
管理用戶
添加用戶
語(yǔ)法:CREATE USER '用戶名'@'主機(jī)名' IDENTIFIED BY '密碼';
刪除用戶
語(yǔ)法:DROP USER '用戶名'@'主機(jī)名';
權(quán)限管理
查詢權(quán)限
語(yǔ)法:DROP USER '用戶名'@'主機(jī)名';
授予權(quán)限
-- 授予權(quán)限 grant 權(quán)限列表 on 數(shù)據(jù)庫(kù)名.表名 to '用戶名'@'主機(jī)名'; -- 給張三用戶授予所有權(quán)限,在任意數(shù)據(jù)庫(kù)任意表上 GRANT ALL ON *.* TO 'zhangsan'@'localhost';
撤銷權(quán)限
-- 撤銷權(quán)限: revoke 權(quán)限列表 on 數(shù)據(jù)庫(kù)名.表名 from '用戶名'@'主機(jī)名'; REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';
到此這篇關(guān)于史上超強(qiáng)最常用SQL語(yǔ)句大全的文章就介紹到這了,更多相關(guān)最常用SQL語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解DB2 sqlstate 57016 SQLCODE=-668 原因碼 "7"錯(cuò)誤的快速解決辦法
db2 sqlstate 57016,db2 57016 原因碼7錯(cuò)誤怎么解決呢?下面小編給大家?guī)?lái)了DB2 sqlstate 57016 SQLCODE=-668 原因碼 "7"錯(cuò)誤的快速解決辦法,一起看下吧2016-08-08Excel導(dǎo)入Sqlserver數(shù)據(jù)庫(kù)腳本
簡(jiǎn)單但很實(shí)用的一段SQL腳本,相信大家在做新舊系統(tǒng)升級(jí)時(shí)會(huì)經(jīng)常用到.2009-10-10啟動(dòng)sqlserver服務(wù)的bat腳本分享
這篇文章主要介紹了啟動(dòng)sqlserver服務(wù)的bat腳本分享,本文直接給出腳本代碼,需要的朋友可以參考下2015-02-02sql導(dǎo)入.back文件的實(shí)現(xiàn)
本文主要介紹了sql導(dǎo)入.back文件的實(shí)現(xiàn),.back文件是一種備份文件,其中包含了數(shù)據(jù)庫(kù)的結(jié)構(gòu)和數(shù)據(jù),然后通過(guò)執(zhí)行一系列的SQL命令,可以還原備份文件到數(shù)據(jù)庫(kù)中,感興趣的可以了解一下2023-11-11c語(yǔ)言http請(qǐng)求解析表單內(nèi)容
c語(yǔ)言解析http請(qǐng)求表單內(nèi)容,基于C語(yǔ)言的CGI開發(fā),大家參考使用吧2013-12-12SQL SERVER修改函數(shù)名容易引發(fā)的問題分析
這篇文章主要介紹了SQL SERVER修改函數(shù)名容易引發(fā)的問題分析的相關(guān)資料,需要的朋友可以參考下2016-02-02基于Python的SQL Server數(shù)據(jù)庫(kù)實(shí)現(xiàn)對(duì)象同步輕量級(jí)
這篇文章主要介紹了基于Python的SQL Server數(shù)據(jù)庫(kù)對(duì)象同步輕量級(jí)實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06把excel表格里的數(shù)據(jù)導(dǎo)入sql數(shù)據(jù)庫(kù)的兩種方法
這篇文章介紹了把excel表格里的數(shù)據(jù)導(dǎo)入sql數(shù)據(jù)庫(kù)的兩種方法,有需要的朋友可以參考一下2013-09-09