日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

完整的查询语句

發(fā)布時(shí)間:2024/5/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 完整的查询语句 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基本的查詢語(yǔ)句
select(*|字段名|四則運(yùn)算|聚合函數(shù)) from表名稱)
取別名 當(dāng)字段名顯示較長(zhǎng)時(shí) 可以添加別名
select 字段名 as 別名 from 表名稱;
as可以省略
select 字段名 別名 from 表名稱

計(jì)算每個(gè)人的總分
計(jì)算每個(gè)人的各科目平均分




insert into 表名稱(字段...)values(值...),(值...);
values中的值的個(gè)數(shù)和類型必須與前方聲明的字段一致
insert into 表名稱 values(值...);
values中的值的個(gè)數(shù)和類型必須與表的字段完全一致

into 可以省略
stu name char(20) default,age int
#insert into table_name values(20),(30),(40);
錯(cuò)誤name 雖然有默認(rèn)值 但是這種語(yǔ)法下也必須賦值


delete from table_name where 條件;
delete from table_name;
truncate table table_name;

update table_name set 字段名稱=新的值 where 條件;
update table_name set 字段名稱=新的值[字段2=值2...];





select語(yǔ)句的完整語(yǔ)法;
select [distinct] (*|字段|四則運(yùn)算|聚合函數(shù))from 表名
where 查詢條件
group by 分組
having 分組后的過(guò)濾
order by 排序
limit 限制獲取的條數(shù)

必須的 select 字段 from 表名
distinct 去處重復(fù)

強(qiáng)調(diào):書寫順序必須按照上面的來(lái)

執(zhí)行順序與書寫順序不一致

def select():
from()
where()
group by()
having()
order by()
limit()
distinct()#對(duì)完全相同的數(shù)據(jù)去重

#從文件讀取數(shù)據(jù)
def from();
with open('表名稱')
pass
#過(guò)濾從文件中讀取的數(shù)據(jù)
def where():
pass
#分組
def group by()
pass
#對(duì)分組后的數(shù)據(jù)進(jìn)行過(guò)濾
def having();
pass
#排序
def order by():
pass
#控制獲取的條數(shù)
def limit():
pass
#取出重復(fù)
def distinct():
pass


where 子查詢
= > < >= <= !=(<>)

in between and like
and or not

select *from stu where not(math != 60); #in(1,2,3,4,5) #math 60 80 90 select *from stu where math in(60,80,90); select *from stu where math = 60 or math = 80 or math = 90;#英語(yǔ)及格并且 數(shù)學(xué)也及格 select *from stu where math >= 60 and english >= 60;#數(shù)學(xué) 在60-80之間 select *from stu where math between 60 and 90; select *from stu where math >= 60 and math <= 90;

?



like 長(zhǎng)的像 模糊匹配
%任意個(gè)任意字符
_一個(gè)任意字符

select *from stu where name like "李%"; 所有姓李的 select *from stu where name like "%%"; 名字帶有李的 select *from stu where name like "%李"; 最后一個(gè)字是李的

group by分組查詢
什么是分組
把一個(gè)整體 按照某個(gè)標(biāo)識(shí)分成不同的部分

分組目的
通常分組都為了要統(tǒng)計(jì)數(shù)據(jù)
語(yǔ)法
select * from emp group by 某個(gè)字段;

強(qiáng)調(diào):
用于分組的字段 通常應(yīng)該是重復(fù)度高的 例如部門 性別
而不應(yīng)該是id name....

語(yǔ)法要求;
select 后面的字段 必須是出現(xiàn)在group by后面的字段

select dept from emp group by dept;

一旦分組后 組內(nèi)的詳細(xì)數(shù)據(jù)就被隱藏了 無(wú)法直接查看但是要知道 分組不是為了查看 而是為了統(tǒng)計(jì)
分組后就只能看到分組的那個(gè)字段

聚合函數(shù)(統(tǒng)計(jì)函數(shù))
給他一堆數(shù)據(jù) 他統(tǒng)計(jì)后返回一個(gè)數(shù)據(jù)
(1,2,3,4,5) sum=15

sum 求和
avg 平均數(shù)
max 最大值
min 最小值
count 計(jì)數(shù)

select sum(salary) as 總月薪 from emp
select dept,max(salary) from emp group by dept


#查詢每個(gè)部門有哪些人
group_concat()
select dept,group_concat(name) from emp group by dept;

#可以有多個(gè)分組依據(jù) 比如先按部門 再按工作崗位

注意注意 :聚合函數(shù)不能用在where后面

如果要對(duì)分組數(shù)據(jù)進(jìn)行過(guò)濾 必須使用having
因?yàn)?where在執(zhí)行時(shí) 數(shù)據(jù)還沒有讀完,必須等到數(shù)據(jù)讀完之后再進(jìn)行過(guò)濾
where 與having的區(qū)別就在于 執(zhí)行時(shí)機(jī)不同

select dept,group_concat(name),count(*) from emp group by dept having count(*) < 3;


group by
where 后不能有聚合函數(shù)
select 后面的字段必須出現(xiàn)在group by后面
通常聚合函數(shù)會(huì)與group by 連用



偽代碼:
from 從文件讀數(shù)據(jù) 到內(nèi)存
datas = []
with open("xxxx") as f:
while True:
data = f.read()
if avg(salary) > 5000;# 數(shù)據(jù)讀取沒有完成 不可能統(tǒng)計(jì)出結(jié)果
datas.append(data)



oder by 排序 默認(rèn)為升序
select * from emp order by salary;
用desc來(lái)指定為降序
select * from emp order by salary desc;
可以定義多個(gè)字段作為排序依據(jù),并且可以單獨(dú)設(shè)置順序
select * from emp order by salary desc,id; #先按照工資降序 如果工資相同則按照id 升序


limit 控制要查詢的記錄數(shù)量
select * from emp limit a,b;

a表示其實(shí)位置
b要獲取的條數(shù)
如果只有a則表示

#分頁(yè)顯示
總共為10頁(yè) 每一頁(yè)顯示3條 頁(yè)數(shù)10/3 有余數(shù)則+1=4

page=1

select * from emp limit 0,3


page=3
(page -1)*3
select * from emp limit 6,3


起始位置的計(jì)算公式
limit (頁(yè)數(shù)-1) * 每頁(yè)的條數(shù),每頁(yè)條數(shù)





distinct 去除重復(fù)
where 過(guò)濾條件
group by 分組
having 分組后的過(guò)濾條件
order by 排序
limit 控制獲取的條數(shù)

聚合函數(shù)
max
min
sum
avg
count(*)

name sex
張三 男
張無(wú)忌 null
count(sex)? 結(jié)果為1
所以 count 會(huì)忽略null值 如果要統(tǒng)計(jì)數(shù)量用count(*) 最好


正則表達(dá)式匹配 (也用于模糊匹配)
insert into emp values(null,"laowangba","男","財(cái)務(wù)","總監(jiān)",5800);
insert into emp values(null,"laoliba","男","市場(chǎng)","總監(jiān)",5800);
insert into emp values(null,"laocheng","男","后勤","總監(jiān)",5800);

語(yǔ)法:
select *from emp regexp "表達(dá)式";
select *from emp where name regexp ".*ba$";
like 只有%和_ 靈活度沒有regexp高


博客:id title content submit_date author
搜索功能案例:
博客:
create table blog
(id int primary key auto_increment,
title char(100),
content varchar(10000),
submit_date timestamp,
author char(20));

web log

模糊查詢語(yǔ)句(搜索功能對(duì)應(yīng)的語(yǔ)句)! 搜索關(guān)鍵字為py
select *from blog where title like "%py%" or content like "%py%" or author like "%py%";


多表查詢

? ? 例如:dept 和 emp 表
? ? ? ? ? ? ?員工表中保存dept的主鍵



1.笛卡爾積查詢
積表示乘積的意思
把兩個(gè)表中的所有數(shù)據(jù) 全部建立關(guān)聯(lián)關(guān)系
a表有一條 b表有三條 總數(shù)據(jù)量為1*3=3條

可以保證肯定有一條關(guān)聯(lián)關(guān)系是正確的,但是同時(shí)會(huì)產(chǎn)生大量的錯(cuò)誤數(shù)據(jù),
我們需要加以過(guò)濾 來(lái)得到正確的數(shù)據(jù)

select * from emp,dept where dept_id =id;#兩個(gè)表都有id字段 所以條件中必須指明表名稱如下
select * from emp,dept where dept_id =dept.id

連接查詢
join
select * from dept join emp;
on==where 只能用于連接查詢
#如果是用來(lái)篩選匹配關(guān)系 建議用on


左外連接查詢
select * from dept left join emp on 條件;
左表無(wú)論是否匹配,都全部顯示 右邊僅顯示匹配成功的
select * from dept left join emp on dept_id=dept.id;
查看所有部門及部門下的所有人員信息

右外連接查詢
select * from dept right join emp on 條件;
右表無(wú)論是否匹配,都全部顯示 左邊僅顯示匹配成功的

全外連接查詢
左右兩邊 無(wú)論是否匹配都要顯示
mysql中不支持 全外連接 oracle 中為full join
mysql 可以通過(guò) union 合并查詢 來(lái)合并左外連接 和右外連接的查詢結(jié)果

union 合并查詢 合并查詢結(jié)果 并且去除重復(fù)的 *******
select *from dept left join emp on dept_id = dept.id
union
select *from dept right join emp on dept_id = dept.id;

union all 合并但不去除重復(fù)
select *from dept left join emp on dept_id = dept.id
union all
select *from dept right join emp on dept_id = dept.id;

注意:union語(yǔ)句 必須使用在兩個(gè)字段數(shù)量相同的情況下


# 查詢1號(hào)部門的名稱和其所有員工名稱;
# 先將兩個(gè)表所有數(shù)據(jù) 連在一起
# 通過(guò)on來(lái)篩選正確的匹配關(guān)系
# 通過(guò)where 來(lái)過(guò)濾 部門id 為 1的數(shù)據(jù)
select * from dept join emp on dept_id = dept.id where dept.id = 1;

后續(xù)無(wú)論是幾個(gè)表 第一步都是先連接查詢 第二步也必然是篩選正確匹配條件 最后根據(jù)實(shí)際需求添加額外條件即可

select * from 表1 join 表2 on 表1的外鍵id= 表2 的主鍵id;



如果是多對(duì)多關(guān)系 那么要獲取數(shù)據(jù) 得查三個(gè)表



套路:
1.先把三個(gè)表全都連在一起 select * from stu join tsr join tea
2.用on來(lái)篩選正確關(guān)系 on stu.id = tsr.s_id and tea.id = tsr.t_id
3.通過(guò)where 添加額外的條件 where tea.name = "egon"

轉(zhuǎn)載于:https://www.cnblogs.com/gengbinjia/p/10553250.html

總結(jié)

以上是生活随笔為你收集整理的完整的查询语句的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。