1. 程式人生 > >單表查詢、多表查詢

單表查詢、多表查詢

單表查詢:
SELECT [DISTINCT] *|{column1, column2. column3…} FROM tablename;

select 指定查詢哪些列的資料。
column指定列名。
*號代表查詢所有列。
from指定查詢哪張表。
DISTINCT可選,指顯示結果時,是否剔除重複資料

查詢全部的行和列:select * from student;
查詢指定的列:select name from student;
查詢多個列:select stuid,name,sex from student;
使用別名:select name AS 姓名,sex AS 性別 from student;

Select五種子句:

Where條件查詢:
	查詢學號為4的學生資訊
	SELECT * FROM student WHERE stuid=4;
	
	between... and...在兩個值之間
	查詢出生日期在1995-07-14到1995-07-16出生的學生資訊
	SELECT * FROM student WHERE birthday BETWEEN '1995-07-14' AND '1995-07-16';
	
	in 在什麼裡面
	SELECT * FROM student WHERE birthday in ('1995-07-14','1995-07-15','1995-07-16');
	
	not 查詢出生日期不在1995-07-14到1995-07-16出生的學生資訊
	SELECT * FROM student WHERE birthday not in('1995-07-14','1995-07-15','1995-07-16');
	
	LIKE 像 喜歡(模糊查詢)
	查詢姓張的學生資訊
	SELECT * FROM student WHERE name LIKE '張%';
	
	查詢姓名以張結尾的
	SELECT * FROM student WHERE name LIKE '%張';
	
	查詢姓名中包含四的學生資訊 %四%
	SELECT * FROM student WHERE name LIKE '%四%';
	
	_:代表一個字元
	查詢姓張且姓名為兩個字的學生資訊
	SELECT * FROM student WHERE name LIKE '張_';
	
	查詢成績為空的成績編號 is null 為空
	SELECT scoid FROM score WHERE socre is NULL;

	AND
	查詢性別是男並且班級編號是1的學生資訊
	SELECT * FROM student WHERE sex='男' AND cid=1;
	
	OR
	查詢性別是男或者班級編號是1的學生資訊
	SELECT * FROM student WHERE sex='男' OR cid=1;

	聚合函式
	SELECT * FROM score;

	查詢學號為1的學員的平均成績 AVG([DISTINCT] expr)
	SELECT avg(socre) AS 平均成績 FROM score WHERE stuid=1;

	COUNT(expr) : 統計參加了科目1考試的學生數量
	SELECT COUNT(*) AS 學生數量 FROM score WHERE subid=1;

	查詢參加科目一考試的所有學生成績總和
	SELECT SUM(socre) FROM score WHERE subid=1;

	查詢科目一最高分和最低分
	SELECT MAX(socre) AS 最高分,MIN(socre) AS 最低分 FROM score WHERE subid=1;

Group分組查詢:
	根據每個科目編號查詢每個科目的平均成績
	SELECT AVG(socre) FROM score GROUP BY subid;

Having篩選:
		having 針對查詢結果起作用,where 針對表中真真正正存在的列起作用
		SELECT subid,AVG(socre) AS 平均成績 FROM score  GROUP BY subid HAVING AVG(socre)>60;
Order by排序:
	查詢學生資訊並按照班級編號升序(預設是asc)
	SELECT * FROM student ORDER BY cid ASC;
Limit限制結果條數:
	LIMIT(資料的座標,顯示多少條) 資料庫的座標從0開始
	查詢年齡最小的五名學生資訊
	SELECT * FROM student ORDER BY birthday DESC LIMIT 0,5;
	
五種子句的編寫順序:
	SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY …limit

多表查詢:

等值連線:
	查詢張三Java的考試成績,顯示學生姓名,科目名,成績,班級名
	1.把錶鏈接成大表
	SELECT `name`,subname,socre,cname FROM student,classinfo,score,`subject` WHERE
	2.確定連線條件
	student.cid=classinfo.cid AND student.stuid=score.stuid AND score.subid=subject.subid
	3.篩選條件
	AND name='張三' AND subname='Java';
	
INNER JOIN:內連線
	獲取姓名為Jim的學生的所在班級,顯示學生姓名,科目名,成績,班級名
	1.把幾個錶鏈接成一個大表
	SELECT stuid,`name`,student.cid,cname FROM student INNER JOIN classinfo
	2.確定連線條件
	ON student.cid=classinfo.cid
	3.確定篩選條件
	WHERE name='Jim';

左連線:LEFT JOIN
	查詢所有學生課程的考試成績,查詢結果保留學生ID、姓名、性別、課程ID、成績
	SELECT student.stuid,`name`,sex,subid,socre FROM student LEFT JOIN score ON student.stuid=score.stuid;
	
右連線:right join
SELECT student.stuid,`name`,sex,subid,socre FROM student RIGHT JOIN score ON student.stuid=score.stuid;

左外連線:以左表為準,去右表找匹配的資料,如果找不到匹配,用null填充
右外連線:以右表為準,去左表找匹配的資料,如果找不到匹配,用null填充
內連線:左表和右表的交集,如果匹配成功,拿出來,匹配不成功丟掉