mysql數據庫的十種查詢方式及多表查詢


--mysql數據庫的十種查詢方式


-- (1)查詢時起別名

SELECT id AS '編號',NAME AS '姓名',age AS '年齡'
 FROM student;

-- (2)查詢時添加常量列

SELECT id AS '編號',NAME AS '姓名',age AS '年齡',
'軟件工程' AS '班級' FROM student;

-- (3)查詢時合並列
-- 注意:只能合並數值列

SELECT id,NAME,age,math,english,
(math+english) AS '總成績' FROM  student;

-- (4)查詢時去除重復

SELECT DISTINCT(address) FROM student;

-- 另一種方式

SELECT DISTINCT address FROM student;

-- (5)條件查詢
-- 1.邏輯條件(and與 or或)
-- 1.1查詢id=1且age=18的學生信息

SELECT * FROM student WHERE id=1 AND age=18;

-- 1.2查詢age=18或age=20的學生

SELECT * FROM student WHERE age=18 OR age=20;

-- 1.3查詢(id=1且age=18)或者(age=20)的學生

SELECT * FROM student WHERE id=1 AND age=18 OR age = 20;

-- 2.比較條件(> < >= <= = <>(不等於))
-- 2.1查詢年齡>=19的學生

SELECT * FROM student WHERE age >= 19;

-- 2.2查詢年齡大於等於18且id不為2的學生

SELECT * FROM student WHERE age>=18 AND id<>2;

-- 2.3查詢id大於1或者age小於等於19的學生

SELECT * FROM student WHERE id> 1 OR age <=19;

-- 2.4查詢姓名不為''空字符串的學生
-- 注意:<>''將空字符串和null都去除了

SELECT * FROM student WHERE NAME <> '';

-- 3.判空條件(is not null不為空,is null為空)
-- 3.1查詢姓名為null的學生

SELECT * FROM student WHERE NAME IS NULL;

-- 3.2查詢姓名不為null的學生
-- 注意:''空字符串和null是不同的

SELECT * FROM student WHERE NAME IS NOT NULL;

-- 4.模糊查詢(like)
-- %表示占位符或統配符,代表任意字符串或什么都不寫
-- _表示占位符,代表任意單個字符
-- 4.1查詢姓張的學生

SELECT * FROM student WHERE NAME LIKE '張%';

-- 4.2查詢姓名中包含'三'的學生

SELECT * FROM student WHERE NAME LIKE '%三%';

-- 4.3查詢名字中包含三的學生,且名字為3個字

SELECT * FROM student WHERE NAME LIKE '_三_';

-- (6)聚合函數
-- max()最大值 min()最小值 AVG()平均值 
-- round()保留幾位小數 count()統計記錄數
-- 1.求出數學成績的最高分

SELECT MAX(math) FROM student;

-- 2.查詢數學成績最高分的學生信息
-- 使用子查詢(in),表示在某個范圍

SELECT * FROM student WHERE math IN
 (SELECT MAX(math) FROM student);

-- 3.求出英語成績的最低分

SELECT MIN(english) FROM student;

-- 4.求數學成績的平均成績

SELECT AVG(math) FROM student;

-- 5.保留2位小數(四舍五入)

SELECT ROUND(math,2) FROM student;

-- 6.統計姓名字段有多少條記錄
-- 注意:不包含null數據

SELECT COUNT(NAME) FROM student;

-- 7.查詢student里共有多少條記錄(數據)
-- *通配符,表示查詢所有字段

SELECT COUNT(*) FROM student;

-- (7)查詢后排序(order by)
-- 注意:order by必須寫在where條件的后面
-- asc升序:按照字典序a-z從小到大排序
-- desc降序:按照字典序從大到小排序
-- 1.對英語成績降序排序

SELECT * FROM student ORDER BY english DESC;

-- 2.對英語成績降序排序,對數學成績升序排序
-- 注意:先按照英語成績降序排序,
-- 當英語成績相同時按數學成績升序排序

SELECT * FROM student ORDER BY english DESC,math ASC;

-- 3.對數學成績進行排序
-- 沒有寫排序方式,默認按升序排序
-- 默認升序可以省略不寫

SELECT *FROM student ORDER BY english,math;

-- (8)分頁查詢(limit m,n)
-- limit m,n m表示從哪個下標開始,選取n條數據
-- 這里n表示每頁顯示的條數
-- 對student表里的6條數據分頁,每頁顯示2條,共3頁
-- 第一頁: 0~1

SELECT * FROM student LIMIT 0,2;

-- limit (1-1)*2,2  limit 0,2
-- 第二頁: 2~3

SELECT * FROM student LIMIT 2,2;

-- limit (2-1)*2,2  limit 2,2
-- 第三頁: 4~5

SELECT * FROM student LIMIT 4,2;

-- limit (3-1)*2,2  limit 4,2
-- 需求:假如表里有1000條數據,每頁顯示20條
-- 請問第34頁顯示的那些數據?
-- 推理分頁公式:limit (第幾頁-1)*n,n
-- limit (34-1)*20,20

-- (9)分組查詢(group by)
-- 1.需求:查詢每個地區的學生有多少人
-- 顯示結果:地區  人數

SELECT address AS '地區',COUNT(*) AS '人數'
 FROM student GROUP BY address;

-- (10)分組查詢后篩選(having)
-- 2.需求:查詢地區人數>=2人的地區

SELECT address AS '地區',COUNT(*) AS '人數'
 FROM student GROUP BY address HAVING COUNT(*)>2;

-- 多表查詢
-- 創建學生表
-- 任務:查詢學生姓名和所在的班級名稱
-- (1)交叉查詢(錯誤)
-- 交叉查詢的結果為笛卡爾積(6*3=18)錯誤
-- 交叉查詢會將每種情況都列舉出來(錯誤)

SELECT s.name,c.name FROM student s,class c;

-- (2)內連接查詢(最常用)
-- 只有符合連接條件的數據才會顯示出來
-- 多表查詢的3要素
-- a.要查哪些字段  b.要查哪些表   c.連接條件

SELECT s.name,c.name FROM student s 
 INNER JOIN class c ON s.classid=c.id;

-- 簡寫=

SELECT s.name,c.name FROM student s,class c
 WHERE s.classid = c.id;

-- (3)左外連接查詢(常用)
-- 左表(student表):左表里的數據全部顯示出來
-- 右表(class表):右表只有符合連接條件的數據才會顯示

SELECT s.name,c.name FROM student s
 LEFT OUTER JOIN class c ON s.classid = c.id;

-- (4)右外連接查詢(次常用)
-- 右外連接查詢看成是左外連接查詢倒過來
-- 左表(class表):左表只有符合連接條件的數據才會顯示
-- 右表(student表):右表里的數據全部顯示出來

SELECT s.name,c.name FROM class c 
 RIGHT OUTER JOIN student s ON c.id=s.classid;

-- (5)自連接查詢
-- 任務:查詢員工名字和其上司姓名

CREATE TABLE employee(
id INT PRIMARY KEY,
NAME VARCHAR(10),
bossid INT
);

-- 插入數據

INSERT INTO employee VALUES (1,'張三',2);
INSERT INTO employee VALUES (2,'李四',3);
INSERT INTO employee VALUES (3,'王五',4);
INSERT INTO employee VALUES (4,'陳六',5);
INSERT INTO employee VALUES (5,'老王',NULL);
SELECT * FROM employee;

-- 任務:查詢員工名字和其上司姓名
-- 自連接查詢的原理:使用左外連接查詢,
-- 只是左表和右表是同一張表

SELECT e1.name,e2.name FROM employee e1 
LEFT OUTER JOIN employee e2 ON e1.bossid = e2.id;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM