學習《MySQL必知必會》筆記一(第1章-9章)

前言


圖為知乎某答主的高分答案,私以為很有道理,于是乎奔《MySQL 必知必會的》而來~

一、基礎知識
1.了解數據庫
數據庫(database):保存有組織的數據的容器
表(table):某種特定類型數據的結構化清單
模式(schema):關于數據庫和表的布局及特性的信息
列(column):表中的一個字段。所有表都是由一個或多個列組成的
數據類型((datatype):所容許的數據類型。每個列表都有相應的數據類型,它限制該列中存儲的數據。
行(row):表中的一個記錄
主鍵(primary key):一列(或一組列),其值能夠唯一區分表中每個行。唯一標識表中每行的這個列稱為主鍵。應該總是定義主鍵。
表中的任何列都可以作為主鍵,只要它滿足以下條件(定義主鍵規則):
1)任意兩行都不具有相同的主鍵值
2)每個行都必須具有一個主鍵值(主鍵列不允許NULL值)
2.DBMS
DBMS可分為兩類:①基于共享文件系統的DBMS ②基于客戶機-服務器的DBMS。
MySQL是一個客戶機-服務器DBMS。
3.選擇數據庫
USE關鍵字,如下:
輸入USE crashcourse
輸出Database changed //表明數據庫選擇成功后顯示
4.了解數據庫和表
SHOW命令可以顯示數據庫,表,列,用戶,權限等信息
SHOW DATABASES;//返回數據庫的一個列表。
SHOW TABLES;//返回當前選擇的數據庫內可用的列表
SHOW COLUMNS FROM curtomers;//給出指定表名的列信息
SQL語句不區分大小寫

二、檢索數據

  1. SELECT語句
    SELECT prod_name FROM products;//檢索單個列
    SELECT prod_id, prod_name,prod_price FROM products;//檢索多個列
    SELECT * FROM proucts;//檢索所有列
    2.mysql> SELECT DISTINCT vend_id FROM products;//檢索不同的行,DISTINCT關鍵字必須直接放在列名的前面。
    3.使用LIMIT限制結果:
    mysql> SELECT prod_name FROM products LIMIT 5;//限制輸出不多于5行
    mysql> SELECT prod_name FROM products LIMIT 5,5;//從行5開始的5行
    =SELECT prod_name FROM products LIMIT 5 OFFSET 5;
    注意索引都是從0開始,所以LIMIT1,1是從2行而不是第一行開始
    4.完全限定的表名
    SELECT products.prod_name FROM crashcourse.products;

三、排序檢索數據
1.** 排序數據**
ORDER BY
SELECT prod_name FROM products ORDER BY prod_name; //排序檢索
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name;//按多個列排序
2.** 指定排序方向**
DESC降序 ** ASC升序**
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC;//降序排序
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC,prod_name DESC;//多個列降序
3.使用ORDER BY與LIMIT的組合能找出最高或最低值
SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;//獲取最昂貴的價格

四、過濾數據
1.使用WHERE子句
SELECT prod_name FROM products WHERE prod_price = 2.5;//只返回prod_price值為2.5的行
WHERE子句的位置:應該在ORDER BY之前
2.WHERE子句操作符
=,<>(不等于),!=(不等于), <,<=, >, >=, BETWEEN(在指定的兩個值之間)
SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 3 AND 10;
3.空值檢查
在創建表時,表設計人員可以指定其中的列是否可以不包含值。在一個列不包含值時,稱其為包含空值NULL。IS NULL子句來檢查具有NULL值的列
輸入SELECT prod_name FROM products WHERE prod_price IS NULL;
輸出Empty set (0.00 sec) //說明價格必須非空

五、數據過濾
1.組合WHERE子句
MySQL允許給出多個WHERE子句,這些子句以兩種方式組合:AND和OR
1.1 AND操作符
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id=1003 AND prod_price <=10;//兩個條件都要滿足
1.2 OR操作符
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id=1003 OR vend_id = 1002;//兩個條件滿足一個就可以
1.3計算次序
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id=1003 OR vend_id = 1002 AND prod_price>=10;//AND操作符優先級高于OR
所以上面理解為:由供應商1002制造的任何價格為10美元以上的產品,或者由供應商1003制造的任何產品,而不管價格如何
SELECT prod_id,prod_price,prod_name FROM products WHERE (vend_id=1003 OR vend_id = 1002) AND prod_price>=10;//()優先級最高
上面語句理解為:價格在10美元以上且有由1002或1003制造的所有產品

  1. IN操作符
    IN操作符用來指定條件范圍,其作用于OR操作符相當,但更清楚直觀,而且可以包含其他SELECT語句,是的能夠更動態的建立where子句。
    SELECT prod_price,prod_name FROM products WHERE vend_id IN (1001,1002,1003) ORDER BY prod_name;
    3.** NOT操作符**
    NOT操作符:否定它之后所跟的任何條件。
    SELECT prod_price,prod_name FROM products WHERE vend_id NOT IN(1002,1003,1001) ORDER BY prod_name;

六、通用配符進行過濾

  1. LIKE操作符
    通配符(wildcard):用來匹配值的一部分的特殊字符
    搜索模式(searchpattern):由字面值、通配符或兩者組合構成的搜索條件(可以區分大小寫)
    LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配進行比較
    1.1 百分號(%)通配符
    %表示任何字符出現任意次數,但不能匹配NULL
    SELECT prod_price,prod_name FROM products WHERE prod_name LIKE'JET%';
    SELECT prod_price,prod_name FROM products WHERE prod_name LIKE'%ANVIL%';
    %代表搜索模式中給定位置的0個、1個或者多個字符。
    1.2下劃線(_)通配符
    下劃線只匹配單個字符
    2.通配符技巧
    1)不要過度使用通配符
    2)把通配符放在開始處,搜索速度最慢

七、用正則表達式進行搜索
正則表達式是用來匹配文本的特殊的串(字符集合)。
1.使用mysql正則表達式
基本字符匹配
SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;
+--------------+
| prod_name |
+--------------+
| JetPack 1000 |
| JetPack 2000 |
+--------------+
上面語句使用了正則表達式.000。.是正則表達式語言中一個特殊的字符。他表示匹配任意一個字符,因此,1000和2000都匹配且返回。
正則表達式匹配不區分大小寫,要區分大小寫可以在REGEXP后面使用BINARY關鍵字。
2.進行or匹配
SELECT prod_name FROM products WHERE prod_name REGEXP '1000 | 2000';
這里的|是正則表達式的OR操作符
3.匹配幾個字符之一
SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name;
這里的[123]表示匹配1或2或3。
4.匹配范圍
SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton';
這里[1-5]定義了一個范圍
5.匹配特殊字符
SELECT vend_name FROM vendors WHERE vend_name REGEXP '\.' ORDER BY vend_name;
為了匹配特殊字符,必須用[\為前導]
\-表示-
\.表示.
\\表示
\f表示換頁
\n表示換行
\r表示回車
\t表示制表
\v表示縱向制表
6.匹配字符類


7.匹配多個實例

看下面兩個例子:
SELECT prod_name FROM products WHERE prod_name REGEXP '\([0-9] sticks?\)' ORDER BY prod_name;//結果如下
+----------------+
| prod_name |
+----------------+
| TNT (1 stick) |
| TNT (5 sticks) |
+----------------+

正則表達式[\([0-9]sticks?\]需要說明一下。\(匹配(,[0-9]匹配任意數字(這個例子中為1和5),sticks?匹配stick和sticks(s后的?使s可選,因為?匹配它前面的任何字符的0次或1次出現),\)匹配。
SELECT prod_name FROM products WHERE prod_name REGEXP '[[:digit:]]{4}' ORDER BY prod_name;
+--------------+
| prod_name |
+--------------+
| JetPack 1000 |
| JetPack 2000 |
+--------------+
2 rows in set (0.00 sec)
[[:digit:]]{4}中{4}要求它前面的字符(任意數字)出現四次,所以[[:digit:]]{4}表示連在一起的任意4位數
8.定位符
^ 文本的開始
$ 文本的結尾
[[:<:]] 詞的開始
[[:>:]] 詞的結尾
SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\.]' ORDER BY prod_name;
^[0-9\.]表示只在.或任意數字為串中第一個字符時才匹配它們。
^的雙重用途
①用在[]里表示否定該集合,②用來指串的開始處。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.表中的任何列都可以作為主鍵, 只要它滿足以下條件:任意兩行都不具有相同的主鍵值;每一行都必須具有一個主鍵值( ...
    Cherryjs閱讀 764評論 0 0
  • 數據庫入門 數據庫: 保存有組織的數據的容器(通常是一個文件或一組文件).數據庫軟件應該稱為 DBMS(DataB...
    Mjericho閱讀 521評論 0 0
  • 第七章 數據過濾 7.1 組合WHERE子句 在第六章介紹的所有WHERE子句在過濾時,使用的都是單一的條件。為了...
    saviochen閱讀 437評論 0 4
  • 第四章 檢索數據 4.1 SELECT語句 SELECT語句的用途是從一個或多個表中檢索信息。為了使用SELECT...
    saviochen閱讀 589評論 0 4
  • 導語 團隊開發的時候我們經常要公用一個證書測試。今天我就講一下證書的配置(已測試證書為例,正式證書幾乎一樣的過程步...
    Zzzzzzzzzzzzzz閱讀 1,013評論 0 0