數據庫最常用的查詢方法詳解,sql語句詳解


—— 數據准備

—— 創建一個數據庫

create database python_test charset=utf8;

 

—— 使用一個數據庫

use python_test;

 

—— 顯示使用的當前數據是哪個?

select database();

 

—— 創建一個數據表

—— students表

create table students(

id int primary key not null auto_increment,

name varchar(20) default ‘’,

age tinyint unsigned default 0,

height decimal(5,2),

gender enum(‘男’,’女’,’中性’,’包名’) default ‘保密’,

cls_id int unsigned default 0,

is_delete bit default 0

);

 

—— classes表

create table classes(

id int primary key auto_increment not null,

name varchar(30) not null

);

— 查詢

— 查詢所有字段

       —— select * from 表名;

select * from students;

select * from classes;

select id, name from students;

 

—— 查詢指定字段

select 字段 … from 表名;

select name, age from students;

 

—— 使用as給字段起別名 查詢指定字段

select 字段 as 別名… from 表名;

select name as 姓名, age as 年齡 from students;

 

—— select 表名.字段 … from 表名;

select students.name, students.age from students;

 

—— 可以通過as 給表起別名

select 別名.字段 。。。 From 表名 as 別名; 表起別名后 只能用別名

select s.name, s.age from students as s;

 

 

—— 消除重復行

distinct 字段

select distinct genter from students;

 

—— 條件查詢

—— 比較運算符

select … from 表名 where …

—>

— 查詢大於18歲的信息

select * from students where age>18;

select id,name,age students where age>18;

 

— <

查詢小於18歲的信息

select * from students where age<18;

 

— >= 

— <= 查詢小於或大於等於18歲的信息

select * from students where age>=18;

select * from students where age<=18;

 

— = 查詢年齡為18歲的所有學生的名字

select * from students where age=18;

 

— != 或者 <>

select * from students where age!=18;

select * from students where age<>18;

—— 邏輯運算符

—— and 

—— 18到28之間的所有學生信息

select * from students where age>18 and age<28; 

 

—— 18以上的女性信息

select * from students where age>18 and gender=2

 

—— or 

—— 18以上或者身高超過180(包含)以上

select * from students age>18 or height>=180;

 

—— not

—— 不在18以上的女性 這個范圍內的信息

select * from students where not (age >=18 and gender=2);

 

—— 年齡不是小於或者等於18 並且是女性

select * from students where not age<=18 and gender=2;

 

—— 模糊查詢

—— like

— % 替換1個或者多個

— _替換1個

— 查詢姓名中 以’小’開始的名字

select name from students where name like '%';

 

—- 查詢姓名中 包含‘小’所有的名字

select name from students where name like ‘%%’;

 

— 查詢有2個字的姓名

select name from students where name like '__';

 

— 查詢有3個字的姓名

select name from students where name like '__';

 

—- 查詢至少有3個字以上的姓名

select name from students where name like ‘___%’;

 

— rlike 正則

— 查詢以 周 開始的姓名

select name from students where name rlike ‘^周.*’;

 

— 查詢以 周開始、倫結尾的姓名

select name from students where name rlike ‘^周.*倫¥’;

 

—— 范圍查詢

— in (1, 3, 8)表示在一個非連續的范圍內

— 查詢年齡為18、34的姓名

select * from students where age=18 and age=34;

select name, age from students where age in(18, 34);

 

 

— not in 不非連續的范圍之內

— 年齡不是18、34 歲之間的信息

select name, age from students where age not in(18, 34); 

 

— between … and … 表示在一個連續的范圍內

— 查詢年齡在18 到34 之間的信息

select * from students where age between 18 and 34;

 

— not between … and … 表示不再一個連續的范圍內

— 查詢 年齡不再18到34之間的信息

select * from students where age not between 18 and 34;

select * from students where not age between 18 and 34;

 

—— 空判斷

— 判空 is null

— 查詢身高為空的信息

select * from students where height is null;

 

— 判非空 is not null

select * from students where height is not null;

 

—— 排序

— order by 字段

— asc 從小到大排序  即升序

— desc 從大到小排序  即降序

 

— 查詢年齡在10到60之間的男性, 按照年齡從小到大排序

select * from students where (age between 10 and 60) and gender=1 order by age;

select * from students where (age between 10 and 60) and gender=1 order by age asc;

 

— 查詢年齡在18到34歲之間的女性,身高從高到矮排序

select * from students where (age between 18 and 34) and gender=2 order by height desc;

 

— order by 多個字段

— 查詢年齡在18到34之間的女性,身高從高到矮排序,如果身高相同的情況下按照年齡從小到大排序

select * from students where (age between 18 and 34) order by height desc, age asc;

 

— 如果年齡也相同 那么按照id從大到小排序

select * from students where (age between 18 and 34) and gender=2 order by height desc, age asc, id desc;

 

 

— 按照年齡從小到大、身高從高到矮的排序

select * from students order by age asc, height desc;

 

—— 聚合函數

— 總數

— count

— 查詢男性有多少人,女性有多少人

select count(*) as 男性人數 from students where gender=1;

select count(*) as 女性人數 from students where gender=2;

 

— 最大值

— max

— 查詢最大的年齡

select max(age) as 年齡最大是 from studentes;

 

— 查詢女性的最高 身高

select max(height) as 女性的最高身高是 from students  where gender=2;

 

— 最小值

— min

select min(height) from students where gender=2;

 

— 求和

— sum

— 計算所有人的年齡總和

select sum(age) from students;

 

— 平均值

—avg

— 計算平均年齡

select avg(age) from students;

 

— 計算平均年齡 sum(age)/count(*)

select sum(age)/count(*) from students;

 

— 四舍五入 round(123,23, 1) 保留1位小數

— 計算所有人的平均年齡,保留2位小數

select round(avg(age), 2) from students;

 

— 計算男性的平均身高,保留2位小數

select round(avg(height), 2) from students where gender=1;

 

—— 分組

— group by

— 按照性別分組,查詢所有的性別

select gender from students group by gender;

 

— 計算每種性別中的人數

select gender, count(*) from students group by gender;

 

— 計算男性的人數

select gender, count(*) from students where gender=1 group by gender;

 

- 查詢男性姓名,id,age

select gender, group_concat(name, id, age) from students where gender=1 group by gender

select gender, group_concat("姓名:",name, "id:",id, "年齡:",age) from students where gender=1 group by gender;

 

 

— group_concat(…)

— 查詢同種性別中的姓名

select gender, group_concat(name) from students group by gender;

 

— having

— 查詢平均年齡超過30歲的性別 以及 姓名 having avg(age) > 30

select gender, group_concat(name), avg(age) from students group by gender having avg(age)>30;

 

— 查詢每種性別中的人數多於2個信息

select gender, group_concat(name) from students group by gender having count(*)>2;

 

—— 分頁

— limit start, count

— 限制查詢出來的數據個數

select * from students where gender=1 limit 2;

 

— 查詢前5個數據

select * from students limit 0, 5;

 

— 查詢id6-10(包含)的書序

select * from students limit 5, 5;

 

— 每頁顯示2個,第一個頁面

select * from students limit 0, 2;

 

— 每頁顯示2個,第2個頁面

select * from students limit 2, 2;

 

— 每頁顯示2個,第三個頁面

select * from students limit 4, 2;

 

— 每頁顯示2個,第四個頁面

select * from students limit 6, 2; ——> limit (第n頁-1)*每頁的個數, 每頁的個數;

 

— 每頁顯示2個,顯示第6頁信息,按照年齡從小到大排序

select * from students order by age limit 10, 2;

 

—— 連接查詢

— 內連接 inner  join … on

— select * from 表1 inner join 表2 on 條件; 

— 查詢 有能夠對應班級的學生以及班級信息

select * from students inner join classes on students.cls_id=classes.id;

 

— 按照要求顯示姓名、班級

select students.name, classes.name from students inner join classes on students.cls_id=classes.id;

 

— 給數據表起名字

select s.name, c.name from students as s inner join classes as c on s.cls_id=c.id;

 

— 查詢 有能夠對應班級的學生以及班級信息,顯示學生的所有信息,只顯示班級名稱

select s.*,c.name from students as s inner join classes as c on s.cls_id=c.id

 

— 在以上的查詢中,將班級姓名顯示在第1列

select c.name, s.* from students as s inner join classes as c on s.cls_id=c.id;

 

— 查詢 有能夠對應班級的學生以及班級信息,按照班級進行排序

select c.name, s.* from students as s inner join classes as c on s.cls_id=c.id order by c.name;

select c.name, s.* from students as s inner join classes as c on s.cls_id=c.id order by c.name,s.id;

 

 

—- left join

—- 查詢每位學生對應的班級信息

select * from students as s left join classes as c on s.cls_id=c.id;

 

— 查詢沒有對應班級信息的學生

select * from students as s left join classes as c on s.cls_id=c.id having c.id is null;

 

— right join on

— 將數據表名互換位置,用left join完成

 

—— 自關聯

— 省級聯動

— 查詢所有省份

select * from area_info where pid in null;

— 查詢出山東省有哪些城市

select * from area_info as province inner join area_info as city on province.aid=city.pid having province.atitle='山東省';

 

—- 查出青島市有哪些縣城

select * from area_info as city inner join area_info as country on city.aid= country.pid having city.atitle=‘青島市’;

 

 

—— 子查詢

—- 標量子查詢

— 查詢出高於平均身高的信息

select * from students where height>(select avg(height) from students);

 

 

 


免責聲明!

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



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