欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文帶你學(xué)會(huì)MySQL的select語(yǔ)句

 更新時(shí)間:2022年11月08日 09:46:47   作者:人間湊個(gè)數(shù)  
在MySQL中可以使用SELECT語(yǔ)句來(lái)查詢(xún)數(shù)據(jù),查詢(xún)數(shù)據(jù)是指從數(shù)據(jù)庫(kù)中根據(jù)需求,使用不同的查詢(xún)方式來(lái)獲取不同的數(shù)據(jù),是使用頻率最高、最重要的操作,下面這篇文章主要給大家介紹了關(guān)于MySQL中select語(yǔ)句的相關(guān)資料,需要的朋友可以參考下

SQL概述

SQL背景知識(shí)

  • 1946 年,世界上第一臺(tái)電腦誕生,如今,借由這臺(tái)電腦發(fā)展起來(lái)的互聯(lián)網(wǎng)已經(jīng)自成江湖。在這幾十年里,無(wú)數(shù)的技術(shù)、產(chǎn)業(yè)在這片江湖里沉浮,有的方興未艾,有的已經(jīng)幾幕興衰。但在這片浩蕩的波動(dòng)里,有一門(mén)技術(shù)從未消失,甚至“老當(dāng)益壯”,那就是 SQL。

    • 45 年前,也就是 1974 年,IBM 研究員發(fā)布了一篇揭開(kāi)數(shù)據(jù)庫(kù)技術(shù)的論文《SEQUEL:一門(mén)結(jié)構(gòu)化的英語(yǔ)查詢(xún)語(yǔ)言》,直到今天這門(mén)結(jié)構(gòu)化的查詢(xún)語(yǔ)言并沒(méi)有太大的變化,相比于其他語(yǔ)言,SQL 的半衰期可以說(shuō)是非常長(zhǎng)了。
  • 不論是前端工程師,還是后端算法工程師,都一定會(huì)和數(shù)據(jù)打交道,都需要了解如何又快又準(zhǔn)確地提取自己想要的數(shù)據(jù)。更別提數(shù)據(jù)分析師了,他們的工作就是和數(shù)據(jù)打交道,整理不同的報(bào)告,以便指導(dǎo)業(yè)務(wù)決策。

  • SQL(Structured Query Language,結(jié)構(gòu)化查詢(xún)語(yǔ)言)是使用關(guān)系模型的數(shù)據(jù)庫(kù)應(yīng)用語(yǔ)言,與數(shù)據(jù)直接打交道,由IBM上世紀(jì)70年代開(kāi)發(fā)出來(lái)。后由美國(guó)國(guó)家標(biāo)準(zhǔn)局(ANSI)開(kāi)始著手制定SQL標(biāo)準(zhǔn),先后有SQL-86,SQL-89,SQL-92,SQL-99等標(biāo)準(zhǔn)。

    • SQL 有兩個(gè)重要的標(biāo)準(zhǔn),分別是 SQL92 和 SQL99,它們分別代表了 92 年和 99 年頒布的 SQL 標(biāo)準(zhǔn),我們今天使用的 SQL 語(yǔ)言依然遵循這些標(biāo)準(zhǔn)。
  • 不同的數(shù)據(jù)庫(kù)生產(chǎn)廠(chǎng)商都支持SQL語(yǔ)句,但都有特有內(nèi)容。

SQL語(yǔ)言排行榜

自從 SQL 加入了 TIOBE 編程語(yǔ)言排行榜,就一直保持在 Top 10。

SQL 分類(lèi)

SQL語(yǔ)言在功能上主要分為如下3大類(lèi):

  • DDL(Data Definition Languages、數(shù)據(jù)定義語(yǔ)言) ,這些語(yǔ)句定義了不同的數(shù)據(jù)庫(kù)、表、視圖、索引等數(shù)據(jù)庫(kù)對(duì)象,還可以用來(lái)創(chuàng)建、刪除、修改數(shù)據(jù)庫(kù)和數(shù)據(jù)表的結(jié)構(gòu)。

    • 主要的語(yǔ)句關(guān)鍵字包括CREATE、DROPALTER等。
  • DML(Data Manipulation Language、數(shù)據(jù)操作語(yǔ)言) ,用于添加、刪除、更新和查詢(xún)數(shù)據(jù)庫(kù)記錄,并檢查數(shù)據(jù)完整性。

    • 主要的語(yǔ)句關(guān)鍵字包括INSERT、DELETE、UPDATE、SELECT等。
    • SELECT是SQL語(yǔ)言的基礎(chǔ),最為重要。
  • DCL(Data Control Language、數(shù)據(jù)控制語(yǔ)言) ,用于定義數(shù)據(jù)庫(kù)、表、字段、用戶(hù)的訪(fǎng)問(wèn)權(quán)限和安全級(jí)別。

    • 主要的語(yǔ)句關(guān)鍵字包括GRANTREVOKE、COMMITROLLBACK、SAVEPOINT等。

因?yàn)椴樵?xún)語(yǔ)句使用的非常的頻繁,所以很多人把查詢(xún)語(yǔ)句單拎出來(lái)一類(lèi):DQL(數(shù)據(jù)查詢(xún)語(yǔ)言)。

還有單獨(dú)將COMMIT、ROLLBACK 取出來(lái)稱(chēng)為T(mén)CL (Transaction Control Language,事務(wù)控制語(yǔ)言)。

SQL語(yǔ)言的規(guī)則與規(guī)范

基本規(guī)則

  • SQL 可以寫(xiě)在一行或者多行。為了提高可讀性,各子句分行寫(xiě),必要時(shí)使用縮進(jìn)

  • 每條命令以 ; 或 \g 或 \G 結(jié)束

  • 關(guān)鍵字不能被縮寫(xiě)也不能分行

  • 關(guān)于標(biāo)點(diǎn)符號(hào)

    • 必須保證所有的()、單引號(hào)、雙引號(hào)是成對(duì)結(jié)束的
    • 必須使用英文狀態(tài)下的半角輸入方式
    • 字符串型和日期時(shí)間類(lèi)型的數(shù)據(jù)可以使用單引號(hào)(' ')表示
    • 列的別名,盡量使用雙引號(hào)(" "),而且不建議省略as

SQL大小寫(xiě)規(guī)范 (建議遵守)

  • MySQL 在 Windows 環(huán)境下是大小寫(xiě)不敏感的

  • MySQL 在 Linux 環(huán)境下是大小寫(xiě)敏感的

    • 數(shù)據(jù)庫(kù)名、表名、表的別名、變量名是嚴(yán)格區(qū)分大小寫(xiě)的
    • 關(guān)鍵字、函數(shù)名、列名(或字段名)、列的別名(字段的別名) 是忽略大小寫(xiě)的。
  • 推薦采用統(tǒng)一的書(shū)寫(xiě)規(guī)范:

    • 數(shù)據(jù)庫(kù)名、表名、表別名、字段名、字段別名等都小寫(xiě)
    • SQL 關(guān)鍵字、函數(shù)名、綁定變量等都大寫(xiě)

注釋

可以使用如下格式的注釋結(jié)構(gòu)

單行注釋?zhuān)?注釋文字(MySQL特有的方式)
單行注釋?zhuān)?- 注釋文字(--后面必須包含一個(gè)空格。)
多行注釋?zhuān)?* 注釋文字  */

命名規(guī)則(暫時(shí)了解)

  • 數(shù)據(jù)庫(kù)、表名不得超過(guò)30個(gè)字符,變量名限制為29個(gè)
  • 必須只能包含 A–Z, a–z, 0–9, _共63個(gè)字符
  • 數(shù)據(jù)庫(kù)名、表名、字段名等對(duì)象名中間不要包含空格
  • 同一個(gè)MySQL軟件中,數(shù)據(jù)庫(kù)不能同名;同一個(gè)庫(kù)中,表不能重名;同一個(gè)表中,字段不能重名
  • 必須保證你的字段沒(méi)有和保留字、數(shù)據(jù)庫(kù)系統(tǒng)或常用方法沖突。如果堅(jiān)持使用,請(qǐng)?jiān)赟QL語(yǔ)句中使用`(著重號(hào))引起來(lái)
  • 保持字段名和類(lèi)型的一致性,在命名字段并為其指定數(shù)據(jù)類(lèi)型的時(shí)候一定要保證一致性。假如數(shù)據(jù)類(lèi)型在一個(gè)表里是整數(shù),那在另一個(gè)表里可就別變成字符型了

舉例:

#以下兩句是一樣的,不區(qū)分大小寫(xiě)
show databases;
SHOW DATABASES;

#創(chuàng)建表格
#create table student info(...); #表名錯(cuò)誤,因?yàn)楸砻锌崭?
create table student_info(...); 

#其中order使用``飄號(hào),因?yàn)閛rder和系統(tǒng)關(guān)鍵字或系統(tǒng)函數(shù)名等預(yù)定義標(biāo)識(shí)符重名了
CREATE TABLE `order`(
    id INT,
    lname VARCHAR(20)
);

select id as "編號(hào)", `name` as "姓名" from t_stu; #起別名時(shí),as都可以省略
select id as 編號(hào), `name` as 姓名 from t_stu; #如果字段別名中沒(méi)有空格,那么可以省略""
select id as 編 號(hào), `name` as 姓 名 from t_stu; #錯(cuò)誤,如果字段別名中有空格,那么不能省略""

數(shù)據(jù)導(dǎo)入指令

在命令行客戶(hù)端登錄mysql,使用source指令導(dǎo)入

mysql> source d:\mysqldb.sql
mysql> desc employees;
+----------------+-------------+------+-----+---------+-------+
| Field          | Type        | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| employee_id    | int(6)      | NO   | PRI | 0       |       |
| first_name     | varchar(20) | YES  |     | NULL    |       |
| last_name      | varchar(25) | NO   |     | NULL    |       |
| email          | varchar(25) | NO   | UNI | NULL    |       |
| phone_number   | varchar(20) | YES  |     | NULL    |       |
| hire_date      | date        | NO   |     | NULL    |       |
| job_id         | varchar(10) | NO   | MUL | NULL    |       |
| salary         | double(8,2) | YES  |     | NULL    |       |
| commission_pct | double(2,2) | YES  |     | NULL    |       |
| manager_id     | int(6)      | YES  | MUL | NULL    |       |
| department_id  | int(4)      | YES  | MUL | NULL    |       |
+----------------+-------------+------+-----+---------+-------+
11 rows in set (0.00 sec)

基本的SELECT語(yǔ)句

SELECT...

SELECT 1; #沒(méi)有任何子句
SELECT 9/2; #沒(méi)有任何子句

SELECT ... FROM

  • 語(yǔ)法:
SELECT   標(biāo)識(shí)選擇哪些列
FROM     標(biāo)識(shí)從哪個(gè)表中選擇
  • 選擇全部列:
SELECT *
FROM   departments;

一般情況下,除非需要使用表中所有的字段數(shù)據(jù),最好不要使用通配符‘*’。使用通配符雖然可以節(jié)省輸入查詢(xún)語(yǔ)句的時(shí)間,但是獲取不需要的列數(shù)據(jù)通常會(huì)降低查詢(xún)和所使用的應(yīng)用程序的效率。通配符的優(yōu)勢(shì)是,當(dāng)不知道所需要的列的名稱(chēng)時(shí),可以通過(guò)它獲取它們。

在生產(chǎn)環(huán)境下,不推薦你直接使用SELECT *進(jìn)行查詢(xún)。

  • 選擇特定的列:
SELECT department_id, location_id
FROM   departments;

MySQL中的SQL語(yǔ)句是不區(qū)分大小寫(xiě)的,因此SELECT和select的作用是相同的,但是,許多開(kāi)發(fā)人員習(xí)慣將關(guān)鍵字大寫(xiě)、數(shù)據(jù)列和表名小寫(xiě),讀者也應(yīng)該養(yǎng)成一個(gè)良好的編程習(xí)慣,這樣寫(xiě)出來(lái)的代碼更容易閱讀和維護(hù)。

列的別名

  • 重命名一個(gè)列

  • 便于計(jì)算

  • 緊跟列名,也可以在列名和別名之間加入關(guān)鍵字AS,別名使用雙引號(hào),以便在別名中包含空格或特殊的字符并區(qū)分大小寫(xiě)。

  • AS 可以省略

  • 建議別名簡(jiǎn)短,見(jiàn)名知意

  • 舉例

    SELECT last_name AS name, commission_pct comm
    FROM   employees;

SELECT last_name "Name", salary*12 "Annual Salary"
FROM   employees;

去除重復(fù)行

默認(rèn)情況下,查詢(xún)會(huì)返回全部行,包括重復(fù)行。

SELECT department_id
FROM   employees;

在SELECT語(yǔ)句中使用關(guān)鍵字DISTINCT去除重復(fù)行

SELECT DISTINCT department_id
FROM   employees;

針對(duì)于:

SELECT DISTINCT department_id,salary 
FROM employees;

這里有兩點(diǎn)需要注意:

  • DISTINCT 需要放到所有列名的前面,如果寫(xiě)成SELECT salary, DISTINCT department_id FROM employees會(huì)報(bào)錯(cuò)。
  • DISTINCT 其實(shí)是對(duì)后面所有列名的組合進(jìn)行去重,你能看到最后的結(jié)果是 74 條,因?yàn)檫@ 74 個(gè)部門(mén)id不同,都有 salary 這個(gè)屬性值。如果你想要看都有哪些不同的部門(mén)(department_id),只需要寫(xiě)DISTINCT department_id即可,后面不需要再加其他的列名了。

空值參與運(yùn)算

  • 所有運(yùn)算符或列值遇到null值,運(yùn)算的結(jié)果都為null
SELECT employee_id,salary,commission_pct,
12 * salary * (1 + commission_pct) "annual_sal"
FROM employees;

這里你一定要注意,在 MySQL 里面, 空值不等于空字符串。一個(gè)空字符串的長(zhǎng)度是 0,而一個(gè)空值的長(zhǎng)度是空。而且,在 MySQL 里面,空值是占用空間的。

著重號(hào)

  • 錯(cuò)誤的
mysql> SELECT * FROM ORDER;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER' at line 1
  • 正確的
mysql> SELECT * FROM `ORDER`;
+----------+------------+
| order_id | order_name |
+----------+------------+
|        1 | shkstart   |
|        2 | tomcat     |
|        3 | dubbo      |
+----------+------------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM `order`;
+----------+------------+
| order_id | order_name |
+----------+------------+
|        1 | shkstart   |
|        2 | tomcat     |
|        3 | dubbo      |
+----------+------------+
3 rows in set (0.00 sec)
  • 結(jié)論

我們需要保證表中的字段、表名等沒(méi)有和保留字、數(shù)據(jù)庫(kù)系統(tǒng)或常用方法沖突。如果真的相同,請(qǐng)?jiān)赟QL語(yǔ)句中使用一對(duì)``(著重號(hào))引起來(lái)。

查詢(xún)常數(shù)

SELECT 查詢(xún)還可以對(duì)常數(shù)進(jìn)行查詢(xún)。對(duì)的,就是在 SELECT 查詢(xún)結(jié)果中增加一列固定的常數(shù)列。這列的取值是我們指定的,而不是從數(shù)據(jù)表中動(dòng)態(tài)取出的。

你可能會(huì)問(wèn)為什么我們還要對(duì)常數(shù)進(jìn)行查詢(xún)呢?

SQL 中的 SELECT 語(yǔ)法的確提供了這個(gè)功能,一般來(lái)說(shuō)我們只從一個(gè)表中查詢(xún)數(shù)據(jù),通常不需要增加一個(gè)固定的常數(shù)列,但如果我們想整合不同的數(shù)據(jù)源,用常數(shù)列作為這個(gè)表的標(biāo)記,就需要查詢(xún)常數(shù)。

比如說(shuō),我們想對(duì) employees 數(shù)據(jù)表中的員工姓名進(jìn)行查詢(xún),同時(shí)增加一列字段corporation,這個(gè)字段固定值為“abc”,可以這樣寫(xiě): SELECT 'abc' as corporation, last_name FROM employees;

總結(jié)

到此這篇關(guān)于MySQL的select語(yǔ)句的文章就介紹到這了,更多相關(guān)MySQL select語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL DBA教程:Mysql性能優(yōu)化之緩存參數(shù)優(yōu)化

    MySQL DBA教程:Mysql性能優(yōu)化之緩存參數(shù)優(yōu)化

    在平時(shí)被問(wèn)及最多的問(wèn)題就是關(guān)于 MySQL 數(shù)據(jù)庫(kù)性能優(yōu)化方面的問(wèn)題,所以最近打算寫(xiě)一個(gè)MySQL數(shù)據(jù)庫(kù)性能優(yōu)化方面的系列文章,希望對(duì)初中級(jí) MySQL DBA 以及其他對(duì) MySQL 性能優(yōu)化感興趣的朋友們有所幫助
    2014-03-03
  • MySQL數(shù)據(jù)庫(kù)表約束超詳細(xì)講解

    MySQL數(shù)據(jù)庫(kù)表約束超詳細(xì)講解

    這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)表約束的相關(guān)資料,MySQL?約束是用于保持?jǐn)?shù)據(jù)完整性和一致性的規(guī)則,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • win10下安裝兩個(gè)MySQL5.6.35數(shù)據(jù)庫(kù)

    win10下安裝兩個(gè)MySQL5.6.35數(shù)據(jù)庫(kù)

    這篇文章主要為大家詳細(xì)介紹了win10下兩個(gè)MySQL5.6.35數(shù)據(jù)庫(kù)安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • MySQL 與 Elasticsearch 數(shù)據(jù)不對(duì)稱(chēng)問(wèn)題解決辦法

    MySQL 與 Elasticsearch 數(shù)據(jù)不對(duì)稱(chēng)問(wèn)題解決辦法

    這篇文章主要介紹了MySQL 與 Elasticsearch 數(shù)據(jù)不對(duì)稱(chēng)問(wèn)題解決辦法的相關(guān)資料,對(duì)于 elasticsearch 增量寫(xiě)入,但經(jīng)常jdbc源一端的數(shù)據(jù)庫(kù)可能會(huì)做數(shù)據(jù)庫(kù)刪除或者更新操作,這里提供解決辦法,需要的朋友可以參考下
    2017-08-08
  • IDEA的database插件無(wú)法連接mysql的解決辦法(08001錯(cuò)誤)

    IDEA的database插件無(wú)法連接mysql的解決辦法(08001錯(cuò)誤)

    用navicat鏈接數(shù)據(jù)庫(kù)正常,mysql控制臺(tái)操作正常,但是用IDEA的數(shù)據(jù)庫(kù)插件鏈接一直報(bào) 08001 錯(cuò)誤,本文就給大家介紹一下IDEA的database插件無(wú)法連接mysql報(bào)08001錯(cuò)誤的解決辦法,需要的朋友可以參考下
    2024-07-07
  • MySQL實(shí)現(xiàn)字符串的拼接,截取,替換,查找位置的操作

    MySQL實(shí)現(xiàn)字符串的拼接,截取,替換,查找位置的操作

    這篇文章主要介紹了MySQL實(shí)現(xiàn)字符串的拼接,截取,替換,查找位置的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 在MySQL中使用LIMIT進(jìn)行分頁(yè)的方法

    在MySQL中使用LIMIT進(jìn)行分頁(yè)的方法

    這篇文章主要介紹了在MySQL中使用LIMIT進(jìn)行分頁(yè)的方法,作者列舉出了三種方法,并且針對(duì)跳頁(yè)等常見(jiàn)問(wèn)題做出了提示,需要的朋友可以參考下
    2015-05-05
  • MYSQL數(shù)據(jù)庫(kù)導(dǎo)入數(shù)據(jù)時(shí)出現(xiàn)亂碼的解決辦法

    MYSQL數(shù)據(jù)庫(kù)導(dǎo)入數(shù)據(jù)時(shí)出現(xiàn)亂碼的解決辦法

    我是用的最后一種方法,前面三種解決MYSQL導(dǎo)入數(shù)據(jù)亂碼的方法沒(méi)試過(guò),東莞SEO推薦大家直接使用第四種方法處理MYSQL導(dǎo)入中文數(shù)據(jù)時(shí)的亂碼問(wèn)題。
    2011-01-01
  • textarea標(biāo)簽(存取數(shù)據(jù)庫(kù)mysql)的換行方法

    textarea標(biāo)簽(存取數(shù)據(jù)庫(kù)mysql)的換行方法

    textarea標(biāo)簽本身不識(shí)別換行功能,回車(chē)換行用的是\n換行符,輸入時(shí)的確有換行的效果,但是html渲染或者保存數(shù)據(jù)庫(kù)mysql時(shí)就只是一個(gè)空格了,這時(shí)就需要利用換行符\n和br標(biāo)簽的轉(zhuǎn)換進(jìn)行處理
    2023-09-09
  • MySQL選擇合適的備份策略和備份工具

    MySQL選擇合適的備份策略和備份工具

    這篇文章主要介紹了MySQL選擇合適的備份策略和備份工具,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-05-05

最新評(píng)論