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.根據需求使用內鏈接或者左鏈接、右鏈接查出須要的結果mysql

6.根據數據庫名獲取數據庫全部表字段信息

SELECT a.table_name 表名, 
	a.table_comment 表說明, 
	b.COLUMN_NAME 字段名,
	b.column_comment 字段說明,
	b.column_type 字段類型,
	b.column_key 約束
	FROM information_schema.tables a LEFT JOIN information_schema.COLUMNS b ON a.table_name = b.TABLE_NAME 
	WHERE a.table_schema = 'droi'

7.mysql行轉列

select substring_index(substring_index('82,83,84,85,86',',',help_topic_id+1),',',-1) as Id
 
from mysql.help_topic
 
where help_topic_id<(length('82,83,84,85,86')-length(replace('82,83,84,85,86',',',''))+1);
相關文章
相關標籤/搜索