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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL——高阶语句(上)

發(fā)布時間:2024/2/28 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL——高阶语句(上) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MySQL高階語句(上)

  • 一、MySQL高級語句
    • 1、ORDER BY----按關(guān)鍵字排序
      • 單字段排序
      • 多字段排序
    • 2、OR/AND----或/且
    • 3、DISTINCT----查詢不重復(fù)記錄
    • 4、GROUP BY----對結(jié)果進行分組
    • 5、LIMIT----限制結(jié)果條目
    • 6、設(shè)置別名
    • 7、AS連接語句
    • 8、通配符
    • 9、子查詢
      • 子查詢----別名as
      • 子查詢----EXISTS
  • 二、視圖
    • 1、創(chuàng)建視圖
  • 三、NULL值
    • 1、null值和空值的區(qū)別

實驗準(zhǔn)備創(chuàng)建一張表
如下:

數(shù)據(jù)庫有一張test表,記錄了學(xué)生的id,姓名,分?jǐn)?shù),地址和愛好 create table test (id int(10) primary key not null auto_increment,name varchar (20) not null,score decimal (5,2),address char (40),hobby varchar (10)); insert into test values(1,'liuyi',80,'beijing','2'); insert into test values(2,'wangwu',90,'shenzheng','2'); insert into test values (3,'lisi',60,'shanghai','4'); insert into test values(4,'tinqi',99,'nanjing','5'); insert into test values (5,'jiaoshou',100,'laowo','3'); insert into test values (6,'xiaoming',10,'zhenjiang','3'); select * from test;

一、MySQL高級語句

1、ORDER BY----按關(guān)鍵字排序

使用SELECT 語句可以將需要的數(shù)據(jù)從Mysql 數(shù)據(jù)庫中查詢出來,如果對查詢的結(jié)果進行排序,可以使用 ORDER BY 語句來完成排序,并最終將排序后的結(jié)果返回給用戶。這個語句的排序不光可以針對某一個字段,也可以會對多個字段#語法: SELECT column1,column2,... FROM table_name ORDER BY column1,column2,... ASC (DESC;ASC |DESCASC是按照升序進行排序的,是默認(rèn)的排序方式,即 ASC可以省略。SELECT語句中如果沒有指定具體的排序方式,則默認(rèn)按AsC方式進行排序。 DESC是按降序方式進行排列。當(dāng)然ORDER BY前面也可以使用WHERE子句對查詢結(jié)果進一步過濾。

單字段排序

按分?jǐn)?shù)排序,默認(rèn)不指定則為升序排序asc

select name,score from test order by score [asc];

按降序排序使用DESC

select name, score from test order by score desc;

多字段排序

原則: order by 之后的參數(shù),使用“,”分割,優(yōu)先級是按先后順序而定,例如: select id,name,hobby from test order by hobby desc,id asc;小結(jié):order by 之后的第一個參數(shù)只有在出現(xiàn)相同數(shù)值,第二個字段才有意義

2、OR/AND----或/且

select * from test where score >70 and score <=90; select * from test where score >70 or score <=90; #嵌套/多條件 select * from test where score >70 or (score >75 and score <90) ;



3、DISTINCT----查詢不重復(fù)記錄

select distinct 字段 from 表名; select distinct hobby from test;PS:以下語句是否可以篩重 select name,hobby from test where hobby in (select distinct hobby from test); 1.distinct必須放在最開頭 2.distinct只能使用需要去重的字段進行操作。 ----也就是說我distinct了name,hobby兩個字段,我后面想根據(jù)id進行排序,是不可以的,因為只能name,age兩個字段進行操作. 3.distinct去重多個字段時,含義是:幾個字段同時重復(fù)時才會被過濾。

4、GROUP BY----對結(jié)果進行分組

通過 SQL查詢出來的結(jié)果,還可以對其進行分組,使用GROUP BY 語句來實現(xiàn),GROUP BY通常都是結(jié)合聚合函數(shù)一起使用的,常用的聚合函數(shù)包括:計數(shù)(COUNT)、求和(SUM)、求平均數(shù)(AVG)、最大值(MAX)、最小值(MIN)GROUP BY 分組的時候可以按一個或多個字段對結(jié)果進行分組處理語法: select hobby,count(id) as sum from test where hobby<=5 group by hobby;selet字段,聚合函數(shù) from 表名,(where 字段名(匹配)數(shù)值) group by 字段名;

5、LIMIT----限制結(jié)果條目

在使用MySQL SELECT 語句進行查詢時,結(jié)果集返回的是所有匹配的記錄。有時候僅需要返回第一行或者前幾行,這時候就需要用到LIMIT子句 語法 SELECT column1,column2,... FROM table_name LIMIT[offset, ] numberoffset, number LIMIT的第一個參數(shù)是位置偏移量(可選參數(shù)),是設(shè)置MySO從哪一行開始顯示。 如果不設(shè)定第一個參數(shù),將會從表中的第一條記錄開始顯示。需要注意的是,第一條記錄的位置偏移量是0,第二條是1,以此類推。第二個參數(shù)是設(shè)置返回記錄行的最大數(shù)目。 offset:索引下標(biāo) number:索引下標(biāo)之后的幾位 結(jié)合order by排序: select * from test order by id desc limit 3,3;

6、設(shè)置別名

在Mysql查詢時,當(dāng)表的名字比較長或者表內(nèi)某些字段比較長時,為了方便書寫或者多次使用相同的表,可以給字段列或表設(shè)置別名。使用的時候直接使用別名,簡潔明了,增強可讀性語法: 列的別名 select 字段 as 字段別名 表名 對于表的別名: select 字段 from 表名 as 別名 PS: AS可以省略列別名設(shè)置示例: select name as 姓名,hobby as 愛好 from test; 表數(shù)據(jù)別名設(shè)置示例: select i.name as 姓名,i.score as 成績 from test as i;使用場景: 1、對復(fù)雜的表進行查詢的時候,別名可以縮短查詢語句 2、多表相連查詢的時候(通俗易懂、減短sql語句)

7、AS連接語句

As作為連接語句 create table tmp as select * from test; #此處As起到的作用: 1、創(chuàng)建一個新表tmp定義表結(jié)構(gòu),插入表數(shù)據(jù)(與info表相同) 2、但是"約束"沒有被"復(fù)制"過術(shù),但定如木外衣人l相似: 克隆、復(fù)制表結(jié)構(gòu)

8、通配符

通配符主要用于替換字符串中的部分字符,通過部分字符的匹配將相關(guān)結(jié)果查詢出來通常通配符都是跟LIKE(模糊查詢)一起使用的,并協(xié)同WHERE子句共同來完成查詢?nèi)蝿?wù)。常用的通配符有兩個,分別是: %:百分號表示零個、一個或多個字符 _:下劃線表示單個字符查詢名字是l開頭的記錄模糊查詢'%,示例: select * from test where name like 'l%'; 模糊查詢、’示例: select * from test where name like 'l_s_'; 結(jié)合使用示例: select * from test where name like 'l_%_';

9、子查詢

定義、示例 #子查詢也被稱作內(nèi)查詢或者嵌套查詢,是指在一個查詢語句里面還嵌套著另一個查詢語句 #子查詢語句是先于主查詢語句被執(zhí)行的,其結(jié)果作為外層的條件返回給主查詢進行下一步的查詢過濾。 PS:子語句可以與主語句所查詢的表相同,也可以是不同表相同表: 示例: select name,score from test where id in (select id from test where score>80);以上: 主語句: select name,score from test where id 子語句(結(jié)果集): select id from test where score>80 in:將主表和子表關(guān)聯(lián)/連接起來的語法in 之后的子查詢語句會給他提供的一個范圍(集合),作為'in'之前where 的判斷條件#示例: 需求:查詢test表id為1,3,5的數(shù)據(jù)(通過子查詢的方式) #單表查詢方式:不同表: select * from test where id in (1,3,5)#子查詢方式 create table num (id int (4)); insert into num values (1),(3),(5); select * from test where id in (select id from num) ; #子查詢不僅可以在SELECT語句中使用,在INERTUPDATEDELETE中也同樣適用。 #支持多層嵌套。 #in語句是用來判斷某個值是否在給定的集合內(nèi)(結(jié)果集),in 往往和select 搭配使用 #可以使用not in表示對結(jié)果集取反


子查詢----別名as

#先查詢test表id,name字段 select id,name from test; 以上命令可查看到test表的內(nèi)容(結(jié)果集)#將結(jié)果集作為一張"表"進行查詢的時候,我們也需要用到別名,示例: mysql>select id from (select id,name from test); #此時會報錯 ERROR 1248 (42000): Every derived table must have its own alias #原因: select * from 表名,此為標(biāo)準(zhǔn)格式,而以上的查詢語句,"表名"的位置其實是一個結(jié)果集,mysql并不能識別, 而此時給與結(jié)果集設(shè)置一個別名,并且以"select a.id,name from a;的方式查詢, 將此結(jié)果集"視為"一張表,就可以正常查詢出數(shù)據(jù)了#所以: select a.id from (select id,name from test) a; 相當(dāng)于: select test.id,name from test; select 表.字段,字段 from;

子查詢----EXISTS

select count(*) as number from tmp where exists (select id from test where name='zhangsan') PS: as number將count統(tǒng)計的結(jié)果作為number(列名)返回exists :布爾值判斷,后面的內(nèi)查詢語句(返回的結(jié)果集)是否成立where:之后跟條件判斷加exists:只是為了判斷exists之后的條件是否成立,如果成立,則正常執(zhí)行主語句的匹配,如不成立,則不會執(zhí)行主語句查詢PS: count為計數(shù),sum為求和,使用sum求和結(jié)合exists,如子查詢結(jié)果集不成立的話,輸出為null


二、視圖

數(shù)據(jù)庫中的虛擬表,這張?zhí)摂M表中不包含真實數(shù)據(jù),只是做了映射鏡花水月/倒影,動態(tài)保存結(jié)果集(數(shù)據(jù))
視圖我們可以定義展示的條件
示例:
需求:滿足80分的學(xué)生展示在視圖中
PS:這個結(jié)果會動態(tài)變化,同時可以給與不同的人群(例如權(quán)限范圍)展示不同的視圖

1、創(chuàng)建視圖

create view v_score as select * from info where score>=80; show table status\G

查看視圖

select * from v_score;

修改原表數(shù)據(jù)

update test set score='60' where name='wangwu';

查看視圖

select * from v_score;



三、NULL值

SQL語句使用過程中,經(jīng)常會碰到NULL這幾個字符。通常使用NULL來表示缺失的值,也就是在表中該字段是沒有值的。如果在創(chuàng)建表時,限制某些字段不為空,則可以使用NOT NULL關(guān)鍵字,不使用則默認(rèn)可以為空。在向表內(nèi)插入記錄或者更新記錄時,如果該字段沒有 NOT NULL并且沒有值,這時候新記錄的該字段將被保存為NULL。 需要注意的是,NOLL值與數(shù)字О或者空白(spaces)的字段是不同的,值為NULL的字段是沒有值的。在SQL 語句中,使用IS NULL可以判斷表內(nèi)的某個字段是不是NULL值,相反的用IS NoT NULL可以判斷不是NULL值。 查詢test表結(jié)構(gòu),id和name字段是不允許空值的

1、null值和空值的區(qū)別

空值長度為0,不占空間, NULL值的長度為null,占用空間 is null無法判斷空值 空值使用"-"或者"<>"來處理( != ) count()計算時,NULL.會忽略,空值會加入計算 驗證: alter table test add column addr varchar(50);統(tǒng)計數(shù)量:檢測null是否會被加入統(tǒng)計中 select count(addr) from test;將test表中其中一條數(shù)據(jù)修改為空值'' update test set addr='' where name='wangwu';統(tǒng)計數(shù)量:檢測空值是否會被添加到統(tǒng)計中 select count(addr) from test;查詢null值 select * from test where addr is null;查詢不為空的值 select * from test where addr is not null;



超強干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的MySQL——高阶语句(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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