最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中select語(yǔ)句介紹及使用示例

 更新時(shí)間:2013年07月29日 17:55:14   作者:  
數(shù)據(jù)表都已經(jīng)創(chuàng)建起來(lái)了,我們就可以用自己喜歡的方式對(duì)數(shù)據(jù)表里面的信息進(jìn)行檢索和顯示了,下面為大家講解下MySQL中select語(yǔ)句的應(yīng)用,感興趣的碰可以學(xué)習(xí)下
數(shù)據(jù)表都已經(jīng)創(chuàng)建起來(lái)了,假設(shè)我們已經(jīng)插入了許多的數(shù)據(jù),我們就可以用自己喜歡的方式對(duì)數(shù)據(jù)表里面的信息進(jìn)行檢索和顯示了,比如說(shuō):可以象下面這樣把整個(gè)數(shù)據(jù)表內(nèi)的內(nèi)容都顯示出來(lái)
select * from president;
也可以只選取某一個(gè)數(shù)據(jù)行里的某一個(gè)數(shù)據(jù)列
select birth from president where last_name='Eisenhower';
select語(yǔ)句的通用形式如下:
select 你要的信息
from 數(shù)據(jù)表(一個(gè)或多個(gè))
where 滿(mǎn)足的條件
select語(yǔ)句有幾個(gè)子句,他們的各種搭配能幫你查出最感興趣的信息,這些子句可以很簡(jiǎn)單,也可以很復(fù)雜,看看作者是如何詳細(xì)講解的

1、用各種操作符來(lái)設(shè)定檢索條件
要想讓select語(yǔ)句只把滿(mǎn)足特定條件的記錄檢索出來(lái),就必須給它加上where字句來(lái)設(shè)置數(shù)據(jù)行的檢索條件。只有這樣,才能有選擇地把數(shù)據(jù)列的取值滿(mǎn)足特定要求的那些數(shù)據(jù)行挑選出來(lái)??梢葬槍?duì)任何類(lèi)型的值進(jìn)行查找,比如說(shuō),對(duì)數(shù)值進(jìn)行搜索
select * from score where score>95; //顯示所有分?jǐn)?shù)在95分以上的信息
也可以針對(duì)字符串值進(jìn)行查找
select last_name,first_name from president where last_name='Tom'; //找出所有姓tom的總統(tǒng)
還可以對(duì)不同類(lèi)型的值進(jìn)行組合查找
select last_name,first_name,birth,state from president
where birth<'1950-1-1' and (state='VA' or state='BA');
//找出1950年前出生于VA州或BA州的總統(tǒng)
可見(jiàn) where子句中可以使用的是算術(shù)操作符(+-*/%),比較操作符(<>=)以及邏輯運(yùn)算符,我們應(yīng)該熟練理解這些操作符的含義(都很簡(jiǎn)單)

2、NULL 值的特別處理
這是一種不屬于任何類(lèi)型的值。它通常用來(lái)表示“沒(méi)有數(shù)據(jù)”“數(shù)據(jù)未知”“數(shù)據(jù)缺失”“數(shù)據(jù)超出取值范圍”“與本數(shù)據(jù)列無(wú)關(guān)”“與本數(shù)據(jù)列的其它值不同”等多種含義。在許多情況下,NULL 值是非常有用的。
我們的各種操作符是不能對(duì)NULL 值進(jìn)行處理的,如果相對(duì)NULL 值進(jìn)行查找,用的是 is null 或 is not null 來(lái)進(jìn)行判斷,舉例如下:
select last_name,first_name,birth,state from president
where death is null; //找出所有沒(méi)死的總統(tǒng)
在某些情況下,NULL 值是很有用的類(lèi)型,大家慢慢就會(huì)理解的。

3、查詢(xún)結(jié)果進(jìn)行排序
一般說(shuō)來(lái),如果創(chuàng)建了一個(gè)數(shù)據(jù)表并向里面插入了一些記錄,當(dāng)發(fā)出一條select * from name命令的時(shí)候,數(shù)據(jù)記錄在查詢(xún)結(jié)果中的先后順序通常與它們被插入時(shí)的先后順序一樣.這當(dāng)然符合我們的思維習(xí)慣.但這只是一種"想當(dāng)然"的假設(shè)而已,事實(shí)上,但記錄被刪除時(shí),數(shù)據(jù)庫(kù)中會(huì)產(chǎn)生一些空的區(qū)域,MYSQL會(huì)用新的記錄來(lái)填補(bǔ)這些區(qū)域,也就是說(shuō),這個(gè)時(shí)候本假設(shè)就不正確了.因此我們必須記住一點(diǎn),從服務(wù)器返回的記錄行的先后順序是沒(méi)有任何保證的!如果想要按照一定的順序,就必須使用order by 子句來(lái)設(shè)置這個(gè)順序.
select last_name,first_name,birth,state from president
order by last_name; //讓總統(tǒng)們的名字按字母順序排列
還可以設(shè)置排列的升序降序
select last_name,first_name from president
order by state DESC,last_name ASC;
//先按照出生地的降序排列,同出生地的按照姓氏的升序排列
注意:如果結(jié)果中含有NULL 值,默認(rèn)情況下他們總是出現(xiàn)在查詢(xún)結(jié)果的開(kāi)頭。

4、限制查詢(xún)結(jié)果中數(shù)據(jù)行個(gè)數(shù)
這個(gè)簡(jiǎn)單,只要用limit 子句就可以了,看兩個(gè)例子:
select last_name,first_name,birth,state from president
order by birth limit 5; //只想看前5個(gè)
order by birth limit 10,5; //返回從第11個(gè)記錄開(kāi)始的5個(gè)記錄(跳過(guò)了10個(gè))
小技巧:從president表中隨機(jī)找出一個(gè)總統(tǒng)來(lái)玩:
select last_name,first_name,birth,state from president
order by rand() limit 1; //這是用了表達(dá)式求值的方法,在哪里都管用

5、對(duì)輸出列進(jìn)行求值和命名
為了提高效率,MYSQL還可以把表達(dá)式的計(jì)算結(jié)果當(dāng)作輸出列的值。表達(dá)式可以很簡(jiǎn)單,也可以很復(fù)雜。例如:下面這個(gè)查詢(xún)有兩個(gè)輸出列,前一個(gè)輸出列對(duì)應(yīng)一個(gè)非常簡(jiǎn)單的表達(dá)式(一個(gè)常數(shù)),而后一個(gè)輸出列則對(duì)應(yīng)著一個(gè)使用了多個(gè)算術(shù)運(yùn)算符和兩個(gè)函數(shù)調(diào)用的復(fù)雜表達(dá)式。
Select 17,format(sqrt(3*3+4*4),0))
輸出:17 5
再看這個(gè)命令:把兩個(gè)輸出列合并成一個(gè)
select concat(first_namem,' ‘,last_name),concat(city,',',state) from president;
如果合并之后輸出列的標(biāo)題過(guò)長(zhǎng),則可以給其一個(gè)別名,如:
select concat(first_namem,' ‘,last_name) as name,
concat(city,',',state) as birth place
from president;這樣就比較美觀了。

6、和日期有關(guān)的問(wèn)題
首先記?。涸贛YSQL中,年份是放到最前面的!我們通常對(duì)日期進(jìn)行下列操作:
按日期進(jìn)行排序
查找某個(gè)日期或日期范圍
提取日期中的年,元,日各個(gè)部分
計(jì)算兩個(gè)日期的間隔
用一個(gè)日期求出另外一個(gè)日期
看例子:
select * from event where date='2002-10-01' //看看這天有何考試信息?
select last_name,first_name,birth,state from president
where death>'1900-01-01' and death<'2000-01-01'; //看看上個(gè)世紀(jì)死了幾個(gè)?
三個(gè)函數(shù)year,month,dayofmonth可以分別分離出日期中的年月日來(lái)。
select last_name,first_name,birth from president
where month(birth)=3; //誰(shuí)生在3月 ?
where month(birth)=7 and dayofmonth(birth) =6; //誰(shuí)生在7月6日?(湯姆克魯斯?)
函數(shù)to_days可以把日期轉(zhuǎn)換為天數(shù)。
select last_name,first_name,birth to_days(death)-to_days(birth) as age from president
可以看看這幫家伙都活了多少天!你自己把它改為年吧。
日期值的減法運(yùn)算還能幫我們計(jì)算出現(xiàn)在距離某個(gè)特定日期還有多長(zhǎng)的時(shí)間,這正是我們用來(lái)找到需要在近期內(nèi)繳納會(huì)費(fèi)的會(huì)員的辦法:
select last_name,first_name,expiration from member
where (to_days(expiration)-to_days(curdate())<60; //有些人60天內(nèi)需要花錢(qián)了!

7、模式匹配
有些情況下,模糊查詢(xún)是很必要的,我們使用like和not like加上一個(gè)帶通配符的字符串就可以了。共有兩個(gè)通配符”_”(單個(gè)字符)和”&”(多個(gè)字符)
select concat(first_namem,' ‘,last_name) as name,
where last_name like ‘W%'; //找到以W或w開(kāi)頭的人
where last_name like ‘%W%'; //找到名字里面W或w開(kāi)頭的人

8、設(shè)置和使用SQL變量
MYSQL 3.23.6以上的版本可以使用查詢(xún)結(jié)果來(lái)設(shè)置變量,我們就能夠方面的把一些結(jié)果保存起來(lái)以供他用。變量的命名規(guī)格是:@name, 賦值語(yǔ)法是 @name:=value ( pascal?) 使用起來(lái)也簡(jiǎn)單:
select @birth:=birth from president
where last_name ='adsltiger'; //執(zhí)行完成后我們就就會(huì)有一個(gè)@birth變量可用
用一下試試:
select concat(first_namem,' ‘,last_name) as name from president
where birth<@birth order by birth; //看看那些人比我大!

*9、生成統(tǒng)計(jì)信息
單純依靠手工來(lái)生成統(tǒng)計(jì)信息是一項(xiàng)既艱苦又耗時(shí)還容易出錯(cuò)的工作,如果我們能熟練掌握用數(shù)據(jù)庫(kù)來(lái)生成各種統(tǒng)計(jì)信息的技巧,他就會(huì)成為很有威力的信息處理工具。作者在這里用了許多篇幅講這個(gè)主題,為了便于大家理解,我分解開(kāi)來(lái)論述:


9.1 找出一組數(shù)據(jù)中到底有多少種不同的值是一項(xiàng)比較常見(jiàn)的統(tǒng)計(jì)工作,而關(guān)鍵字distinct就可以把查詢(xún)結(jié)果中的重復(fù)數(shù)據(jù)清除掉。如
select distinct state from president //看看美國(guó)總統(tǒng)們都來(lái)自那些州?(重復(fù)的不計(jì))


9.2用count()函數(shù)來(lái)統(tǒng)計(jì)相關(guān)記錄的個(gè)數(shù),注意其使用方法:count(*)計(jì)算所有的,NULL也要;count(數(shù)據(jù)列名稱(chēng)) NULL值不計(jì)算在內(nèi)。
select count(*) from president;


9.3如果我們想知道班級(jí)內(nèi)的男女生數(shù)目?該如何查詢(xún)呢?最簡(jiǎn)單的方法是
select count(*) from student where sex='f';
select count(*) from student where sex='m
但是如果使用count函數(shù)結(jié)合group by關(guān)鍵字,一行命令就搞定了
select sex,count(*) f rom student group by sex;
我們可以看到,與反復(fù)使用彼此類(lèi)似的查詢(xún)來(lái)分別統(tǒng)計(jì)某數(shù)據(jù)列不同取值出現(xiàn)次數(shù)的做法相比,把count(*)和group by字句相結(jié)合使用有許多優(yōu)點(diǎn),主要表現(xiàn)在:
在開(kāi)始統(tǒng)計(jì)自前,不必知道被統(tǒng)計(jì)的數(shù)據(jù)列里面有多少種不同的取值
因?yàn)橹挥昧艘粋€(gè)查詢(xún)命令,我們可以對(duì)輸出做排序的處理
select state,count(*) as count from president
group by state order by count desc limt4; //看看出生總統(tǒng)最多的前四個(gè)州是哪幾個(gè)?


9.4除了count(),我們還用其他一些統(tǒng)計(jì)函數(shù),如求出最小值的min(),求最大值的max(),求和的sum(),求平均值的avg(),在實(shí)際工作中,這些函數(shù)時(shí)經(jīng)常用到的!

*10、從多個(gè)表提取信息
我們目前的例子都是從一個(gè)表里面提取信息,但數(shù)據(jù)庫(kù)的真正威力還在于用“關(guān)系”來(lái)綜合多個(gè)數(shù)據(jù)表里面的記錄,這種操作稱(chēng)之為“關(guān)聯(lián)”或“結(jié)合”我們可以看到,select需要給出多個(gè)數(shù)據(jù)表里面的信息(不可重復(fù));from需要知道從哪幾個(gè)表里面做事;where則對(duì)幾個(gè)表之間的關(guān)聯(lián)信息作出詳細(xì)的描述。
首先我們要學(xué)習(xí)最可靠的數(shù)據(jù)列引用方式:數(shù)據(jù)表名.數(shù)據(jù)列名。這樣在查詢(xún)中就一定不會(huì)混淆這個(gè)數(shù)據(jù)列到底在哪一個(gè)表里。


例子1:查詢(xún)某一天內(nèi)的學(xué)生們的考試成績(jī),用學(xué)號(hào)列出。
select scroe.student_id,event_date,score.score.event.type
from event,score
where event.date='2003-09-12'
and event.event_id=score.event_id
首先,利用event數(shù)據(jù)表把日期映射到一個(gè)考試事件編號(hào),在利用這個(gè)編號(hào)把score表內(nèi)相匹配的考試分?jǐn)?shù)找出來(lái)。關(guān)聯(lián)兩個(gè)表,一個(gè)查詢(xún)搞定。


例子2:查詢(xún)某一天內(nèi)的學(xué)生們的考試成績(jī),用姓名列出。
select student.name event.name,score.score,event.type
form event,score,student
where event.date='2003-09-12'
and event.event_id= score.event_id
and scroe.student_id=student.student_id;
關(guān)聯(lián)三個(gè)表,一個(gè)查詢(xún)搞定。


例子3:查詢(xún)一下缺席學(xué)生的名字,學(xué)號(hào),缺席次數(shù)
select student.student_id,student_name
count(absence.date) as absences
from student,absence
where student.student_id=absence.student_id //關(guān)聯(lián)條件
group by student.student_id;

相關(guān)文章

  • MySQL Like模糊查詢(xún)速度太慢如何解決

    MySQL Like模糊查詢(xún)速度太慢如何解決

    這篇文章主要介紹了MySQL Like模糊查詢(xún)速度太慢如何解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • MySQL字符集不一致導(dǎo)致索引失效的解決辦法

    MySQL字符集不一致導(dǎo)致索引失效的解決辦法

    本文分析了一個(gè)由于字符集不一致,導(dǎo)致增加了索引但是無(wú)法使用的案例,通過(guò)索引進(jìn)行查找時(shí)需要進(jìn)行數(shù)據(jù)的比較,字符集不一致時(shí)需要使用 convert 函數(shù)進(jìn)行轉(zhuǎn)換,從而導(dǎo)致索引失效,文中有詳細(xì)的解決辦法,需要的朋友可以參考下
    2024-04-04
  • Mysql二進(jìn)制安裝與備份的全過(guò)程記錄

    Mysql二進(jìn)制安裝與備份的全過(guò)程記錄

    這篇文章主要給大家介紹了關(guān)于Mysql二進(jìn)制安裝與備份的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • 詳解在MySQL中創(chuàng)建表的教程

    詳解在MySQL中創(chuàng)建表的教程

    這篇文章主要介紹了詳解在MySQL中創(chuàng)建表的教程,是MySQL入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Mysql?for?update導(dǎo)致大量行鎖的問(wèn)題

    Mysql?for?update導(dǎo)致大量行鎖的問(wèn)題

    這篇文章主要介紹了Mysql?for?update?導(dǎo)致大量行鎖的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • mysql利用參數(shù)sql_safe_updates限制update/delete范圍詳解

    mysql利用參數(shù)sql_safe_updates限制update/delete范圍詳解

    這篇文章主要給大家介紹了關(guān)于mysql如何利用參數(shù)sql_safe_updates限制update/delete范圍的相關(guān)資料文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • 使用use index優(yōu)化sql查詢(xún)的詳細(xì)介紹

    使用use index優(yōu)化sql查詢(xún)的詳細(xì)介紹

    本篇文章是對(duì)使用use index優(yōu)化sql查詢(xún)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Mapper sql語(yǔ)句字段和實(shí)體類(lèi)屬性名字有什么關(guān)系

    Mapper sql語(yǔ)句字段和實(shí)體類(lèi)屬性名字有什么關(guān)系

    這篇文章主要介紹了Mapper sql語(yǔ)句字段和實(shí)體類(lèi)屬性名字有什么關(guān)系,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • MYSQL關(guān)聯(lián)關(guān)系查詢(xún)方式

    MYSQL關(guān)聯(lián)關(guān)系查詢(xún)方式

    文章詳細(xì)介紹了MySQL中如何使用內(nèi)連接和左外連接進(jìn)行表的關(guān)聯(lián)查詢(xún),并展示了如何選擇列和使用別名,文章還提供了一些關(guān)于查詢(xún)優(yōu)化的建議,并鼓勵(lì)讀者參考和支持腳本之家
    2025-02-02

最新評(píng)論

曲周县| 徐闻县| 鄄城县| 万全县| 五常市| 当涂县| 疏勒县| 洪雅县| 嘉兴市| 灵武市| 庆安县| 绥中县| 河源市| 仁布县| 巩义市| 浏阳市| 湟源县| 福安市| 蒙阴县| 类乌齐县| 巴彦县| 北流市| 盈江县| 方正县| 岢岚县| 桃园县| 江油市| 湛江市| 开封县| 鄂托克旗| 禄劝| 绥德县| 盐津县| 冕宁县| 莱西市| 搜索| 华蓥市| 长子县| 汨罗市| 滦平县| 七台河市|