一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話: 2025年07月24日 04:25 星期四
您的當(dāng)前位置: > 關(guān)注 > > 正文

精彩看點:mysql中select是什么意思?如何用各種操作符來設(shè)定select語句?

來源:CSDN 時間:2023-01-10 15:27:13

數(shù)據(jù)表都已經(jīng)創(chuàng)建起來了,假設(shè)我們已經(jīng)插入了許多的數(shù)據(jù),我們就可以用自己喜歡的方式對數(shù)據(jù)表里面的信息進行檢索和顯示了,比如說:可以象下面這樣把整個數(shù)據(jù)表內(nèi)的內(nèi)容都顯示出來


(資料圖片)

select * from president;

也可以只選取某一個數(shù)據(jù)行里的某一個數(shù)據(jù)列

select birth from president where last_name=’Eisenhower’;

select語句的通用形式如下:

select 你要的信息

from 數(shù)據(jù)表(一個或多個)

where 滿足的條件

select語句有幾個子句,他們的各種搭配能幫你查出最感興趣的信息,這些子句可以很簡單,也可以很復(fù)雜,看看作者是如何詳細講解的

1,用各種操作符來設(shè)定檢索條件

要想讓select語句只把滿足特定條件的記錄檢索出來,就必須給它加上where字句來設(shè)置數(shù)據(jù)行的檢索條件。只有這樣,才能有選擇地把數(shù)據(jù)列的取值滿足特定要求的那些數(shù)據(jù)行挑選出來??梢葬槍θ魏晤愋偷闹颠M行查找,比如說,對數(shù)值進行搜索

select * from score where score>95; //顯示所有分?jǐn)?shù)在95分以上的信息

也可以針對字符串值進行查找

select last_name,first_name from president where last_name=’Tom’; //找出所有姓tom的總統(tǒng)

還可以對不同類型的值進行組合查找

select last_name,first_name,birth,state from president

where birth

//找出1950年前出生于VA州或BA州的總統(tǒng)

可見 where子句中可以使用的是算術(shù)操作符(+-*/%),比較操作符(<>=)以及邏輯運算符,我們應(yīng)該熟練理解這些操作符的含義(都很簡單)

2,NULL 值的特別處理

這是一種不屬于任何類型的值。它通常用來表示“沒有數(shù)據(jù)”“數(shù)據(jù)未知”“數(shù)據(jù)缺失”“數(shù)據(jù)超出取值范圍”“與本數(shù)據(jù)列無關(guān)”“與本數(shù)據(jù)列的其它值不同”等多種含義。在許多情況下,NULL 值是非常有用的。

我們的各種操作符是不能對NULL 值進行處理的,如果相對NULL 值進行查找,用的是 is null 或 is not null 來進行判斷,舉例如下:

select last_name,first_name,birth,state from president

where death is null; //找出所有沒死的總統(tǒng)

在某些情況下,NULL 值是很有用的類型,大家慢慢就會理解的。

3,查詢結(jié)果進行排序

一般說來,如果創(chuàng)建了一個數(shù)據(jù)表并向里面插入了一些記錄,當(dāng)發(fā)出一條select * from name命令的時候,數(shù)據(jù)記錄在查詢結(jié)果中的先后順序通常與它們被插入時的先后順序一樣.這當(dāng)然符合我們的思維習(xí)慣.但這只是一種"想當(dāng)然"的假設(shè)而已,事實上,但記錄被刪除時,數(shù)據(jù)庫中會產(chǎn)生一些空的區(qū)域,MYSQL會用新的記錄來填補這些區(qū)域,也就是說,這個時候本假設(shè)就不正確了.因此我們必須記住一點,從服務(wù)器返回的記錄行的先后順序是沒有任何保證的!如果想要按照一定的順序,就必須使用order by 子句來設(shè)置這個順序.

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 值,默認情況下他們總是出現(xiàn)在查詢結(jié)果的開頭。

4,限制查詢結(jié)果中數(shù)據(jù)行個數(shù)

這個簡單,只要用limit 子句就可以了,看兩個例子:

select last_name,first_name,birth,state from president

order by birth limit 5;//只想看前5個

order by birth limit 10,5; //返回從第11個記錄開始的5個記錄(跳過了10個)

小技巧:從president表中隨機找出一個總統(tǒng)來玩:

select last_name,first_name,birth,state from president

order by rand() limit 1; //這是用了表達式求值的方法,在哪里都管用

5,對輸出列進行求值和命名

為了提高效率,MYSQL還可以把表達式的計算結(jié)果當(dāng)作輸出列的值。表達式可以很簡單,也可以很復(fù)雜。例如:下面這個查詢有兩個輸出列,前一個輸出列對應(yīng)一個非常簡單的表達式(一個常數(shù)),而后一個輸出列則對應(yīng)著一個使用了多個算術(shù)運算符和兩個函數(shù)調(diào)用的復(fù)雜表達式。

Select 17,format(sqrt(3*3+4*4),0))

輸出:17 5

再看這個命令:把兩個輸出列合并成一個

select concat(first_namem,’ ‘,last_name),concat(city,’,’,state) from president;

如果合并之后輸出列的標(biāo)題過長,則可以給其一個別名,如:

select concat(first_namem,’ ‘,last_name) as name,

concat(city,’,’,state) as birth place

from president;這樣就比較美觀了。

6,和日期有關(guān)的問題

首先記?。涸贛YSQL中,年份是放到最前面的!我們通常對日期進行下列操作:

按日期進行排序

查找某個日期或日期范圍

提取日期中的年,元,日各個部分

計算兩個日期的間隔

用一個日期求出另外一個日期

看例子:

select * from event where date=’2002-10-01’ //看看這天有何考試信息?

select last_name,first_name,birth,state from president

where death>’1900-01-01’ and death

三個函數(shù)year,month,dayofmonth可以分別分離出日期中的年月日來。

select last_name,first_name,birth from president

where month(birth)=3; //誰生在3月 ?

where month(birth)=7 and dayofmonth(birth) =6; //誰生在7月6日?(湯姆克魯斯?)

函數(shù)to_days可以把日期轉(zhuǎn)換為天數(shù)。

select last_name,first_name,birth to_days(death)-to_days(birth) as age from president

可以看看這幫家伙都活了多少天!你自己把它改為年吧。

日期值的減法運算還能幫我們計算出現(xiàn)在距離某個特定日期還有多長的時間,這正是我們用來找到需要在近期內(nèi)繳納會費的會員的辦法:

select last_name,first_name,expiration from member

where (to_days(expiration)-to_days(curdate())<60; //有些人60天內(nèi)需要花錢了!

7,模式匹配

有些情況下,模糊查詢是很必要的,我們使用like和not like加上一個帶通配符的字符串就可以了。共有兩個通配符”_”(單個字符)和”&”(多個字符)

select concat(first_namem,’ ‘,last_name) as name,

where last_name like ‘W%’; //找到以W或w開頭的人

where last_name like ‘%W%’; //找到名字里面W或w開頭的人

8,設(shè)置和使用SQL變量

MYSQL 3.23.6以上的版本可以使用查詢結(jié)果來設(shè)置變量,我們就能夠方面的把一些結(jié)果保存起來以供他用。變量的命名規(guī)格是:@name, 賦值語法是 @name:=value ( pascal?) 使用起來也簡單:

select @birth:=birth from president

where last_name =’adsltiger’;//執(zhí)行完成后我們就就會有一個@birth變量可用

用一下試試:

select concat(first_namem,’ ‘,last_name) as name from president

where birth

*9,生成統(tǒng)計信息

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

9.1 找出一組數(shù)據(jù)中到底有多少種不同的值是一項比較常見的統(tǒng)計工作,而關(guān)鍵字distinct就可以把查詢結(jié)果中的重復(fù)數(shù)據(jù)清除掉。如

select distinct state from president//看看美國總統(tǒng)們都來自那些州?(重復(fù)的不計)

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

select count(*) from president;

9.3如果我們想知道班級內(nèi)的男女生數(shù)目?該如何查詢呢?最簡單的方法是

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ù)使用彼此類似的查詢來分別統(tǒng)計某數(shù)據(jù)列不同取值出現(xiàn)次數(shù)的做法相比,把count(*)和group by字句相結(jié)合使用有許多優(yōu)點,主要表現(xiàn)在:

在開始統(tǒng)計自前,不必知道被統(tǒng)計的數(shù)據(jù)列里面有多少種不同的取值

因為只用了一個查詢命令,我們可以對輸出做排序的處理

select state,count(*) as count from president

group by state order by count desc limt4; //看看出生總統(tǒng)最多的前四個州是哪幾個?

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

*10,從多個表提取信息

我們目前的例子都是從一個表里面提取信息,但數(shù)據(jù)庫的真正威力還在于用“關(guān)系”來綜合多個數(shù)據(jù)表里面的記錄,這種操作稱之為“關(guān)聯(lián)”或“結(jié)合”我們可以看到,select需要給出多個數(shù)據(jù)表里面的信息(不可重復(fù));from需要知道從哪幾個表里面做事;where則對幾個表之間的關(guān)聯(lián)信息作出詳細的描述。

首先我們要學(xué)習(xí)最可靠的數(shù)據(jù)列引用方式:數(shù)據(jù)表名.數(shù)據(jù)列名。這樣在查詢中就一定不會混淆這個數(shù)據(jù)列到底在哪一個表里。

例子1:查詢某一天內(nèi)的學(xué)生們的考試成績,用學(xué)號列出。

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ù)表把日期映射到一個考試事件編號,在利用這個編號把score表內(nèi)相匹配的考試分?jǐn)?shù)找出來。關(guān)聯(lián)兩個表,一個查詢搞定。

例子2:查詢某一天內(nèi)的學(xué)生們的考試成績,用姓名列出。

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)三個表,一個查詢搞定。

例子3:查詢一下缺席學(xué)生的名字,學(xué)號,缺席次數(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)聯(lián)操作就介紹到這里。事實上,對于關(guān)聯(lián)的知識我們需要學(xué)的很多很多,比如說,我們懷疑某一個數(shù)據(jù)表內(nèi)不存在和我們相關(guān)的數(shù)據(jù),把么在關(guān)聯(lián)查詢的時候如何處理這個表呢?這就涉及到內(nèi)聯(lián)接,外聯(lián)接,左聯(lián)接,右聯(lián)接的許多新概念了。不知道大家還有沒有信心向下看我的筆記?在本書第四章里面,對關(guān)聯(lián)進行了十分詳細的論述,看來“在SQL里面,干粗活的是select”的說法再對不過了。

我們了解了select命令的如此之多的用法,感到了它的靈活性,許多字句的組合能夠形成一個非常“精妙”的SQL語句,在基礎(chǔ)沒有打好之前,我等初學(xué)者目前還沒有必要去鉆研那些技巧性很高的東西,“一定程度的創(chuàng)造性是必要的,但太專業(yè)或充滿技巧的代碼則是各種 bug的發(fā)源地,同時也是若干個不眠之夜的前奏”

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top 主站蜘蛛池模板: 富蕴县| 简阳市| 甘泉县| 阳泉市| 康乐县| 高陵县| 武乡县| 临沂市| 电白县| 当涂县| 革吉县| 霍山县| 峨山| 定结县| 来安县| 牡丹江市| 洪江市| 汪清县| 文登市| 马边| 湛江市| 邢台市| 玛曲县| 仙居县| 射阳县| 怀来县| 禄劝| 太仆寺旗| 柏乡县| 湖州市| 西贡区| 新民市| 筠连县| 安顺市| 平谷区| 南溪县| 定兴县| 江华| 大化| 连云港市| 金昌市|