首頁 > 軟體

史上超強最常用SQL語句大全

2023-02-12 06:01:39

DDL(Data Definition Language)資料定義語言

一、操作庫

-- 建立庫
create database db1;
-- 建立庫是否存在,不存在則建立
create database if not exists db1;
-- 檢視所有資料庫
show databases;
-- 檢視某個資料庫的定義資訊 
show create database db1; 
-- 修改資料庫字元資訊
alter database db1 character set utf8; 
-- 刪除資料庫
drop database db1; 

二、操作表

--建立表
create table student(
    id int,
    name varchar(32),
    age int ,
    score double(4,1),
    birthday date,
    insert_time timestamp
);
 
-- 檢視表結構
desc 表名;
-- 檢視建立表的SQL語句
show create table 表名;
-- 修改表名
alter table 表名 rename to 新的表名;
-- 新增一列
alter table 表名 add 列名 資料型別;
-- 刪除列
alter table 表名 drop 列名;
-- 刪除表
drop table 表名;
drop table  if exists 表名 ;

DML(Data Manipulation Language)資料操作語言

一、增加 insert into

-- 寫全所有列名
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
-- 不寫列名(所有列全部新增)
insert into 表名 values(值1,值2,...值n);
-- 插入部分資料
insert into 表名(列名1,列名2) values(值1,值2);

二、刪除 delete

-- 刪除表中資料
delete from 表名 where 列名  = 值;
-- 刪除表中所有資料
delete from 表名;
-- 刪除表中所有資料(高效 先刪除表,然後再建立一張一樣的表。)
truncate table 表名;

三、修改 update

-- 不帶條件的修改(會修改所有行)
update 表名 set 列名 = 值;
-- 帶條件的修改
update 表名 set 列名 = 值 where 列名=值;

DQL(Data Query Language)資料查詢語言

關於查詢語句有很多,這裡基礎的不再介紹。主要介紹排序查詢、聚合函數、模糊查詢、分組查詢、分頁查詢、內連線、外連線、子查詢

一、基礎關鍵字

 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(去除重複值)

-- 查詢英語成績不為null
SELECT * FROM student WHERE english  IS NOT NULL;
	
 _:單個任意字元
 %:多個任意字元
-- 查詢姓馬的有哪些? like
SELECT * FROM student WHERE NAME LIKE '馬%';
-- 查詢姓名第二個字是化的人			
SELECT * FROM student WHERE NAME LIKE "_化%";				
-- 查詢姓名是3個字的人
SELECT * FROM student WHERE NAME LIKE '___';					
-- 查詢姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '%德%';
 
-- 關鍵詞 DISTINCT 用於返回唯一不同的值。
-- 語法:SELECT DISTINCT 列名稱 FROM 表名稱
SELECT DISTINCT NAME FROM  student ;

二、排序查詢 order by

語法:order by 子句

          order by 排序欄位1 排序方式1 ,  排序欄位2 排序方式2...

注意:
            如果有多個排序條件,則當前邊的條件值一樣時,才會判斷第二條件。

-- 例子
SELECT * FROM person ORDER BY math; --預設升序
SELECT * FROM person ORDER BY math desc; --降序

三、 聚合函數:將一列資料作為一個整體,進行縱向的計算。

1.count:計算個數

2.max:計算最大值

3.min:計算最小值

4.sum:計算和

5.avg:計算平均數

四、 分組查詢 grout by

      語法:group by 分組欄位;

      注意:分組之後查詢的欄位:分組欄位、聚合函數

-- 按照性別分組。分別查詢男、女同學的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;
 
-- 按照性別分組。分別查詢男、女同學的平均分,人數
 SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
 
--  按照性別分組。分別查詢男、女同學的平均分,人數 要求:分數低於70分的人,不參與分組
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
 
 --  按照性別分組。分別查詢男、女同學的平均分,人數 要求:分數低於70分的人,不參與分組,分組之後。人數要大於2個人
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
SELECT sex , AVG(math),COUNT(id) 人數 FROM student WHERE math > 70 GROUP BY sex HAVING 人數 > 2;

五、 分頁查詢

    1. 語法:limit 開始的索引,每頁查詢的條數;
    2. 公式:開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數
    3. limit 是一個MySQL"方言" 

-- 每頁顯示3條記錄 
 
SELECT * FROM student LIMIT 0,3; -- 第1頁
 
SELECT * FROM student LIMIT 3,3; -- 第2頁
 
SELECT * FROM student LIMIT 6,3; -- 第3頁

六、內連線查詢:

   1. 從哪些表中查詢資料

   2.條件是什麼

   3. 查詢哪些欄位

1.隱式內連線:使用where條件消除無用資料

-- 查詢員工表的名稱,性別。部門表的名稱
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.顯式內連線

-- 語法: 
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.左外連線 -- 查詢的是左表所有資料以及其交集部分。

-- 語法: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.右外連線  -- 查詢的是右表所有資料以及其交集部分。

-- 語法:
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就完成這個操作。這就是子查詢
SELECT * FROM emp WHERE emp.`salary` = (SELECT MAX(salary) FROM emp);

1.子查詢的結果是單行單列的

 子查詢可以作為條件,使用運運算元去判斷。 運運算元: > >= < <= =

-- 查詢員工工資小於平均工資的人
SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);

 2. 子查詢的結果是多行單列的:

   子查詢可以作為條件,使用運運算元in來判斷

-- 查詢'財務部'和'市場部'所有的員工資訊
SELECT id FROM dept WHERE NAME = '財務部' OR NAME = '市場部';
SELECT * FROM emp WHERE dept_id = 3 OR dept_id = 2;
 
-- 子查詢
SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '財務部' OR NAME = '市場部');

3. 子查詢的結果是多行多列的:

   子查詢可以作為一張虛擬表參與查詢

-- 查詢員工入職日期是2011-11-11日之後的員工資訊和部門資訊
-- 子查詢
SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.`join_date` > '2011-11-11') t2 WHERE t1.id = t2.dept_id;
 
-- 普通內連線
SELECT * FROM emp t1,dept t2 WHERE t1.`dept_id` = t2.`id` AND t1.`join_date` >  '2011-11-11'

 DCL(Data Control Language)資料控制語言

管理使用者

新增使用者

語法:CREATE USER '使用者名稱'@'主機名' IDENTIFIED BY '密碼';

刪除使用者

語法:DROP USER '使用者名稱'@'主機名';

許可權管理

查詢許可權

語法:DROP USER '使用者名稱'@'主機名';

授予許可權

-- 授予許可權
grant 許可權列表 on 資料庫名.表名 to '使用者名稱'@'主機名';
 
-- 給張三使用者授予所有許可權,在任意資料庫任意表上
GRANT ALL ON *.* TO 'zhangsan'@'localhost';

復原許可權

-- 復原許可權:
revoke 許可權列表 on 資料庫名.表名 from '使用者名稱'@'主機名';
REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';

到此這篇關於史上超強最常用SQL語句大全的文章就介紹到這了,更多相關最常用SQL語句內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com