1. 程式人生 > >Mysql實戰中常用sql的分析

Mysql實戰中常用sql的分析

1.查詢具體的最高、最低、平均值、大於平均值、小於平均值

-- 查詢Score表中的最高分的學生學號和課程號。
SELECT * FROM students s, scores c WHERE s.sno = c.sno AND c.degree = 
(SELECT MAX(degree) FROM scores);
  • 套路:1.求出最大值;2.學生表和成績表連表或者子查詢

2.查詢每個分類中最大、最小的數量

-- 查詢每個職位的最高工資以及人數
SELECT job.jname, res.jid, res.salary, COUNT(1) FROM 
(SELECT * FROM emp, 
	(SELECT MAX(salary) as max, job_id as jid FROM emp GROUP BY jid) as max_table
WHERE emp.job_id = max_table.jid AND emp.salary = max_table.max) as res, 
job WHERE res.jid = job.id GROUP BY jid;
  • 套路:1.分組求出每個職位的最高工資;2.和職工表連表查詢出結果集;3.對結果集連表、分組求出人數、職位、工資

3.從表中複製一條資料並插入(主鍵自增)

從表中複製一條資料,並插入
insert into student ( Sname,Sage,Ssex ) select Sname,Sage,Ssex from student where Sid =1;

4.查詢一條資料,以別名展示

-- 查詢出1990年以後出生的學生,並升序排列,
顯示欄位gender,性別為則顯示為'male',女則顯示為'female',非男或女則顯示為'other'
SELECT Sname, Sage, Ssex,
(CASE Ssex
	WHEN '男' THEN 'male'
	WHEN '女' THEN 'female'
	ELSE 'other'
END
) as gender
FROM student WHERE SUBSTRING(Sage, 1, 4) > 1990 ORDER BY Sage;
  • 套路:使用case...when...

5.查詢存在和不存在的情況

查詢存在" 01 "課程但可能不存在" 02 "課程的情況(不存在時顯示為 null )
select * from
(select * from sc where sc.CId = '01') as t1
left join
(select * from sc where sc.CId = '02') as t2
on t1.SId = t2.SId;

套路:1.使用條件查詢查出存在01課程的情況;2.根據需求使用內連線或者左連線、右連線