MySql___(5) MySQL 必知必會

第3章 使用MySql

3.1 連接
3.2 選擇數(shù)據(jù)庫

首先在登錄數(shù)據(jù)庫情況,可以先使用 show databases;展示出有哪些數(shù)據(jù)庫

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| 9                  |
| book               |
| bookstore          |
| db_9griddiary      |
| db_database13      |
| hibernate          |
| hwp_db             |
| jdbc01             |
| mysql              |
| onlinexam          |
| performance_schema |
| test               |
+--------------------+
13 rows in set (0.06 sec)

輸入 USE book

輸出 Database changed

表示選中了book數(shù)據(jù)庫;

3.3 了解數(shù)據(jù)庫和表

SHOW TABLES; 返回當前選擇的數(shù)據(jù)庫內可用表的列表。

輸入 SHOW TABLES;

輸出

mysql> SHOW TABLES;
+------------------+
| Tables_in_book   |
+------------------+
| book_info        |
| product_tb       |
| tb_studnet_batch |
+------------------+

SHOW也可以用來顯示表列:

輸入 SHOE COLUMNS FROM book_info;

輸出

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| name      | varchar(200) | NO   |     | NULL    |                |
| price     | double       | NO   |     | NULL    |                |
| bookCount | int(11)      | NO   |     | NULL    |                |
| author    | varchar(45)  | NO   |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

**SHOE COLUMNS ** 要求給出一個表名,它對應每個字段返回一行,行中包含字段名、數(shù)據(jù)類型、是否允許NULL、鍵信息、默認值以及其他信息(如字段id的auto_incerement)。

其他的SHOW語句還有:

SHOW STATUS ,用于顯示廣泛的服務器狀態(tài)信息;

SHOW GRANTS,用來顯示授予用戶(所有用戶或特定用戶)的安全權限;

SHOW ERRORSSHOW WARNINGS,用來顯示服務器錯誤或警告消息;

第4章 檢索數(shù)據(jù)

4.1 SELECT 語句
4.2 檢索單個列

輸入

SELECT name FROM book_info;

上述語句利用SELECT語句從book_info表中檢索一個名name的列。所需的列名在SELECT關鍵字之后給出,FROM關鍵字指出從其中檢索數(shù)據(jù)的表名。此語句的輸出如下所示:

+----------------------+
| name                 |
+----------------------+
| JAVAWeb              |
| 1111                 |
| 名稱一               |
| 或者                 |
| 名稱一               |
| 山月不知心底事       |
| 致我們終將逝去的青春 |
| 平凡的世界           |
| aj                   |
| 我是作者             |
+----------------------+

未排序數(shù)據(jù)“如果讀者自己試驗這個查詢,可能會發(fā)現(xiàn)顯示輸出的數(shù)據(jù)順序與這里的不同。出現(xiàn)這種情況很正常。如果沒有明確排序查詢結果(下一章介紹),則返回的數(shù)據(jù)的順序沒有特殊意義。返回數(shù)據(jù)的順序可能是數(shù)據(jù)被添加到表中的順序,
也可能不是。只要返回相同數(shù)目的行,就是正常的。

結束SQL語句多條SQL語葉心須以分號(;)分隔、MySQL如同多數(shù)DBMS一樣,不需要在單條SQL語句后加分號。但特定的DBMS可能必須在單條SQL語葉后加上分號。當然,如果愿意可以總是加上分號。事實上,即使不一定需要,但加上分號肯定沒有壞處。如果你使用的是mySq1l命令行,必須加上分號來結束SQL語句。

SQL語句和大小寫 請注意,SQL語句不區(qū)分大小寫,因此SELECT與select是相同的.同樣,寫成Select也沒有關系。許多SQL開發(fā)人員喜歡對所有SQL關鍵字使用大寫,而對所有列和表名使用小寫,這樣做使代碼更易于閱讀和調試

使用空格 在處理SQL語句時,其中所有空格都被忽略。SQL語句可以在一行上給出,也可以分成許多行.多數(shù)SQL開發(fā)人員認為將SQL語句分成多行更容易閱讀和調試。

4.3 檢索多個列

要想從一個表中檢索多個列,使用相同的SELECT語句。唯一的不同是必須在SELECT關鍵字后給出多個列名,列名之間必須以逗號分隔。

當心逗號在選擇多個列時,一定要在列名之間加上逗號,但_
最后一個列名后不加。如果在最后一個列名后加了迎號,將出
現(xiàn)錯誤。

輸入

SELECT name  ,author FROM book_info;

輸出

+----------------------+-----------+
| name                 | author    |
+----------------------+-----------+
| JAVAWeb              | b         |
| 1111                 | c         |
| 名稱一               | 我的作者  |
| 或者                 | 余華      |
| 名稱一               | 安安      |
| 山月不知心底事       | 辛夷塢    |
| 致我們終將逝去的青春 | 辛夷塢    |
| 平凡的世界           | 路遙      |
| aj                   | back back |
| 我是作者             | 中文測試  |
+----------------------+-----------+
4.4 檢索所有列

輸入 select * from book_info;

分析 如果給定一個通配符(*),則返回表中所有列。列的順序一般是列在表定義中出現(xiàn)的順序。但有時候并不是這樣的,表的模式的變化(如添加或刪除列)可能會導致順序的變化。

4.5 檢索不同的行

使用DISTINCT關鍵字,返回不同值的列表

輸入 SELECT DISTINCT price FROM book_info;

分析 SELECT DISTINCT price告訴MYSQL 只返回不同的price行。

輸出

+-------+
| price |
+-------+
|  20.6 |
|    30 |
|    80 |
|  30.5 |
|    35 |
|    40 |
|    58 |
+-------+
4.6 限制結果

SELECT語句返回所有匹配的行,它們可能是指定表中的每個行。為了返回第一行或前幾行,可使用LIMIT子句。

輸入 SELECT price FROM book_info LIMIT 5;

分析 此語句使用SELECT語句檢索單個列。LIMIT5指示MySQL返回不多于5行

為得出下一個5行,可指定要檢索的開始行和行數(shù):

輸入 SELECT price FROM book_info LIMIT 5,5;

分析 LIMIT5,5指示MySQL返回從行5開始的5行。第一個數(shù)為開始位置,第二個數(shù)為要檢索的行數(shù)。

索引從0開始~ 在行數(shù)不夠時,有多少返回多少!

4.7 使用完全限定的表名

使用完全限定的名字來引用列(同時使用表名和列字)

輸入 SELECT book_info.name FROM book_info;

表名也可以是完全限定的:

SELECT book_info.name FROM book.book_info;

第5章 排序檢索數(shù)據(jù)

5.1 排序數(shù)據(jù)

為了明確地排序用SELECT語句檢索出的數(shù)據(jù),可使用0RDER BY子句。0RDER BY子句取一個或多個列的名字,據(jù)此對輸出進行排序

輸入 select book_info.name FROM book_info ORDER BY name;

輸出

+----------------------+
| name                 |
+----------------------+
| 1111                 |
| aj                   |
| JAVAWeb              |
| 名稱一               |
| 名稱一               |
| 山月不知心底事       |
| 平凡的世界           |
| 我是作者             |
| 或者                 |
| 致我們終將逝去的青春 |
+----------------------+

ORDER BY使用非檢索的列排序數(shù)據(jù)是完全合法的。

5.2 按多個列排序

輸入 SELECT name ,price,author FROM book_info ORDER BY price,author;

輸出

+----------------------+-------+-----------+
| name                 | price | author    |
+----------------------+-------+-----------+
| JAVAWeb              |  20.6 | b         |
| 1111                 |    30 | c         |
| 或者                 |    30 | 余華      |
| 名稱一               |  30.5 | 安安      |
| 山月不知心底事       |    35 | 辛夷塢    |
| 穩(wěn)穩(wěn)當當             |    40 | A         |
| 平凡的世界           |    40 | 路遙      |
| 致我們終將逝去的青春 |    40 | 辛夷塢    |
| 測試                 |  40.5 | 中        |
| aj                   |    58 | back back |
| 我是作者             |    58 | 中文測試  |
| 名稱一               |    80 | 我的作者  |
+----------------------+-------+-----------+

上訴例子表示,僅在多個具有相同的price值時才對書本按autor進行排序,如果price列中所有的值都是唯一的,則不會按author排序。

5.3 指定方向排序

數(shù)據(jù)有升序和降序,為了進行降序排序,必須指定DESC關鍵字。

輸入 SELECT name ,price,author FROM book_info ORDER BY author DESC;

輸出

+----------------------+-------+-----------+
| name                 | price | author    |
+----------------------+-------+-----------+
| 致我們終將逝去的青春 |    40 | 辛夷塢    |
| 山月不知心底事       |    35 | 辛夷塢    |
| 平凡的世界           |    40 | 路遙      |
| 名稱一               |    80 | 我的作者  |
| 名稱一               |  30.5 | 安安      |
| 或者                 |    30 | 余華      |
| 我是作者             |    58 | 中文測試  |
| 測試                 |  40.5 | 中        |
| 1111                 |    30 | c         |
| aj                   |    58 | back back |
| JAVAWeb              |  20.6 | b         |
| 穩(wěn)穩(wěn)當當             |    40 | A         |
+----------------------+-------+-----------+

在多列上降序排序 如果想在多個列上進行降序排序,必須對每個列指定DESC關鍵字。

使用ORDER BYLIMIT組合,,能夠找出一個列中最高或最低的值。

輸入 SELECT price FROM book_info ORDER BY price DESC LIMIT 1;

輸出

+-------+
| price |
+-------+
|    80 |
+-------+

分析price DESC保證行是按照由最昂貴到最便宜檢索的,而LIMIT1告訴MySQL僅返回一行。

0RDER BY子句的位置“在給出O0RDER BY二句時,應該保證它位于FROM十句之后.如果使用tIMIT,它處須位于0RDER BY之后。使用子句的次序不對將產生錯誤消息。

第6章 過濾數(shù)據(jù)

6.1 使用WHERE語句

輸入 SELECT name,price,author FROM book_info WHERE price=30;

輸出

+------+-------+--------+
| name | price | author |
+------+-------+--------+
| 1111 |    30 | c      |
| 或者 |    30 | 余華   |
+------+-------+--------+

分析

這條語句從book_info 表中檢索三個列,但不返回所有行,只返回price值為30的行。

WHERE子句的位置在同時使用ORDER BYWHERE子句時,應該讓0RDERBY位于WHERE之后,否則將會產生錯誤。

6.2 WHERE 語句子句操作符
操作符 說明
= 等于
<>
!=
<
<=
>
>=
BETAEEN
  • 6.2.1 檢查單個值

    輸入

    SELECT name,price,author FROM book_info WHERE price <=30;

  • 6.2.2 不匹配檢查

    輸入

    SELECT name,price,author FROM book_info WHERE price <> 40;

    輸出

    +----------------+-------+-----------+
    | name           | price | author    |
    +----------------+-------+-----------+
    | JAVAWeb        |  20.6 | b         |
    | 1111           |    30 | c         |
    | 名稱一         |    80 | 我的作者  |
    | 或者           |    30 | 余華      |
    | 名稱一         |  30.5 | 安安      |
    | 山月不知心底事 |    35 | 辛夷塢    |
    | aj             |    58 | back back |
    | 我是作者       |    58 | 中文測試  |
    | 測試           |  40.5 | 中        |
    +----------------+-------+-----------+
    
  • 6.2.3 范圍值檢查

    檢查范圍值,可使用 BETWEEN關鍵字

    輸入

    SELECT name,price,author FROM book_info WHERE price BETWEEN 20 AND 40;

    輸出

    +----------------------+-------+--------+
    | name                 | price | author |
    +----------------------+-------+--------+
    | JAVAWeb              |  20.6 | b      |
    | 1111                 |    30 | c      |
    | 或者                 |    30 | 余華   |
    | 名稱一               |  30.5 | 安安   |
    | 山月不知心底事       |    35 | 辛夷塢 |
    | 致我們終將逝去的青春 |    40 | 辛夷塢 |
    | 平凡的世界           |    40 | 路遙   |
    | 穩(wěn)穩(wěn)當當             |    40 | A      |
    +----------------------+-------+--------+
    

  • 6.2.4 空值檢查
輸入

SELECT name,price,author FROM book_info WHERE name IS NULL;

第7章 數(shù)據(jù)過濾

7.1
7.1.1 AND操作符

輸入

SELECT name,price,author,bookCount  FROM book_info WHERE bookCount < 40 AND price <50;

輸出

+----------------------+-------+--------+-----------+
| name                 | price | author | bookCount |
+----------------------+-------+--------+-----------+
| JAVAWeb              |  20.6 | b      |        10 |
| 名稱一               |  30.5 | 安安   |        20 |
| DD                   |    35 | 辛夷塢 |        10 |
| 致我們終將逝去的青春 |    40 | 辛夷塢 |         0 |
| 平凡的世界           |    40 | 路遙   |         0 |
+----------------------+-------+--------+-----------+
7.2 IN操作符

IN操作符用來指定條件范圍,范圍中的每個條件都可以進行匹配。

輸入

SELECT name,author FROM book_info WHERE price in (30,40,58) ORDER BY name;

輸出

+----------------------+-----------+
| name                 | author    |
+----------------------+-----------+
| 1111                 | c         |
| aj                   | back back |
| 平凡的世界           | 路遙      |
| 我是作者             | 中文測試  |
| 或者                 | 余華      |
| 穩(wěn)穩(wěn)當當             | A         |
| 致我們終將逝去的青春 | 辛夷塢    |
+----------------------+-----------+

分析

此SELECT語句價格為30、40、58的所有書本信息。IN操作符后跟由逗號分隔的合法值清單,整個清單必須括在圓括號中。(IN并不是數(shù)學中的區(qū)間概念,如30、40、58僅僅是30,40,58)

INOR功能相同,如下

輸入

SELECT name,author FROM book_info WHERE price=30 OR price=40 OR price=58  ORDER BY name;

IN操作符的優(yōu)點:

  • 在使用長的合法選項清單時,IN操作符的語法更清楚且更直觀。
  • 在使用IN時,計算的次序更容易管理(因為使用的操作符更少)。
  • IN操作符一般比0R操作符清單執(zhí)行更快。
  • IN的最大優(yōu)點是可以包含其他SELECT語句,使得能夠更動態(tài)地建立WHERE子句。
7.3 NOT操作符

WHERE子句中的NOT操作符有且只有一個功能,那就是否定它之后所
跟的任何條件。

輸入

 SELECT name,author FROM book_info WHERE price NOT IN (30,40,58) ORDER BY name;

輸出

+---------+----------+
| name    | author   |
+---------+----------+
| DD      | 辛夷塢   |
| JAVAWeb | b        |
| 名稱一  | 我的作者 |
| 名稱一  | 安安     |
| 測試    | 中       |
+---------+----------+

第8章 用通配符進行過濾

8.1 LIKE操作符
8.1.1 百分號(%)通配符

最常使用的通配符是百分號(%)。在搜索中,%表示任何字符出現(xiàn)任意次數(shù)。例如,為了找出所有以詞起頭的產品,可使用以下SELECT語句:

輸入

 SELECT * FROM book_info WHERE name LIKE '名%';

輸出

+----+--------+-------+-----------+-----------+
| id | name   | price | bookCount | author    |
+----+--------+-------+-----------+-----------+
|  3 | 名稱二 |    80 |        77 | 我的作者  |
|  5 | 名稱一 |  30.5 |        20 | 安安      |
|  9 | 名稱三 |    58 |        60 | back back |
+----+--------+-------+-----------+-----------+

通配符可在搜索模式中任意位置使用,并且可以使用多個通配符。下面的例子使用兩個通配符,它們位于模式的兩端:

輸入

SELECT * FROM book_info WHERE name LIKE '%的%';

輸出

+----+----------------------+-------+-----------+--------+
| id | name                 | price | bookCount | author |
+----+----------------------+-------+-----------+--------+
|  7 | 致我們終將逝去的青春 |    40 |         0 | 辛夷塢 |
|  8 | 平凡的世界           |    40 |         0 | 路遙   |
+----+----------------------+-------+-----------+--------+
8.1.2 下劃線(_)通配符

另一個有用的通配符是下劃線(_)。下劃線的用途與%一樣,但下劃線只匹配單個字符而不是多個字符。

8.2 使用通配符的技巧
  • 不要過度使用通配符。如果其他操作符能達到相同的目的,應該
    使用其他操作符。
  • 在確實需要使用通配符時,除非絕對有必要,否則不要把它們用
    在搜索模式的開始處。把通配符置于搜索模式的開始處,搜索起
    來是最慢的。
  • 仔細注意通配符的位置。如果放錯地方,可能不會返回想要的數(shù)據(jù)。

第9章 用正則表達式進行搜索

9.1 正則表達式介紹
9.2 使用MySql正則表達式
9.2.1 基本字符匹配
9.2.2 進行OR匹配

輸入

 SELECT * FROM book_info WHERE bookCount REGEXP '20|60|50' ORDER BY name;

輸出

+----+----------+-------+-----------+-----------+
| id | name     | price | bookCount | author    |
+----+----------+-------+-----------+-----------+
|  2 | 1111     |    30 |        50 | c         |
|  5 | 名稱一   |  30.5 |        20 | 安安      |
|  9 | 名稱三   |    58 |        60 | back back |
| 14 | 我是作者 |    58 |        60 | 中文測試  |
+----+----------+-------+-----------+-----------+
9.2.3 匹配幾個字符之一
9.2.4 匹配范圍

輸入

 SELECT * FROM book_info WHERE name REGEXP '[1-6]書名' ORDER BY name;

輸出

+----+---------+-------+-----------+--------+
| id | name    | price | bookCount | author |
+----+---------+-------+-----------+--------+
| 18 | 2書名字 |    50 |       200 | 作者B  |
| 19 | 3書名   |    20 |        63 | 作者C  |
| 21 | 5書名   |    20 |        60 | 作者4  |
+----+---------+-------+-----------+--------+
9.2.5 匹配特色字符

例如想找出包含.字符的值,該怎樣搜索

輸入

 SELECT * FROM book_info WHERE name REGEXP '\\.' ORDER BY name;

注意:使用.匹配需要使用兩個\進行轉義;

9.2.6 匹配字符類
說明
[alnum:] 任意孛母和數(shù)子(同[a-ZA-Z0-9])

[:alpha:] 任意字符(同[a-zA-Z])

[:blank:] 空格和制表(同[V\t]

[:cntrl:] ASCII控制字符(ASCII0到31和127)

[:digit:] 任意數(shù)字(同[0-9])

[:graph:1] 與[:print:]相同,但不包括空格

[:Lower:] 任意小寫字母(同[a-z])

[:print:] 任意可打印字符

[:punct:] 既不在[:alnum:]又不在[:cntr1l:]中的任意字符
9.2.7 匹配多個實例
9.2.8 定位符

第10章 創(chuàng)建計算字段

10.1 計算字段
10.2 拼接字段

在MySQL的SELECT語句中,可使用Concat()函數(shù)來拼接兩個列。

輸入

 SELECT Concat(name,'(',price,')') FROM book_info ;

輸出

+----------------------------+
| Concat(name,'(',price,')') |
+----------------------------+
| JAVAWeb(20.6)              |
| 1111(30)                   |
| 名稱二(80)                 |
| 或者(30)                   |
| 名稱一(30.5)               |
| DD(35)                     |
| 致我們終將逝去的青春(40)   |
| 平凡的世界(40)             |
| 名稱三(58)                 |
| 我是作者(58)               |
| 穩(wěn)穩(wěn)當當(40)               |
| 測試(40.5)                 |
| 1 書名(30)                 |
| 2書名字(50)                |
| 3書名(20)                  |
| 9書名(37)                  |
| 5書名(20)                  |
| 書.名(15)                  |
+----------------------------+

Rtrim()可以刪除數(shù)據(jù)右側多余的空格

輸入

SELECT Concat(Rtrim(name),'(',Rtrim(price),')') FROM book_info ;
10.3 執(zhí)行算術計算

total_price 包含單價和數(shù)量乘積。

輸入

 SELECT name,price ,bookCount ,price*bookCount AS total_price FROM book_info;

輸出

+----------------------+-------+-----------+-------------+
| name                 | price | bookCount | total_price |
+----------------------+-------+-----------+-------------+
| JAVAWeb              |  20.6 |        10 |         206 |
| 1111                 |    30 |        50 |        1500 |
| 名稱二               |    80 |        77 |        6160 |
| 或者                 |    30 |        40 |        1200 |
| 名稱一               |  30.5 |        20 |         610 |
| DD                   |    35 |        10 |         350 |
| 致我們終將逝去的青春 |    40 |         0 |           0 |
| 平凡的世界           |    40 |         0 |           0 |
| 名稱三               |    58 |        60 |        3480 |
| 我是作者             |    58 |        60 |        3480 |
| 穩(wěn)穩(wěn)當當             |    40 |       100 |        4000 |
| 測試                 |  40.5 |       100 |        4050 |
| 1 書名               |    30 |        60 |        1800 |
| 2書名字              |    50 |       200 |       10000 |
| 3書名                |    20 |        63 |        1260 |
| 9書名                |    37 |        50 |        1850 |
| 5書名                |    20 |        60 |        1200 |
| 書.名                |    15 |        66 |         990 |
+----------------------+-------+-----------+-------------+
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容