日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL的基本查询(一)

發布時間:2024/4/11 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL的基本查询(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

表的增刪改查

文章目錄

    • 表的增刪改查
    • 1. Create
    • 2. Retrieve
    • 2.1 SELECT 列
    • 2.2 WHERE 條件
    • 2.3 結果排序
    • 2.4 篩選分頁結果

1. Create

語法:

INSERT [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ... value_list: value, [, value] ...

案例:

-- 創建一張學生表 CREATE TABLE students ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, sn INT NOT NULL UNIQUE COMMENT '學號', name VARCHAR(20) NOT NULL, qq VARCHAR(20) );

1.1 單行數據 + 全列插入:

-- 插入兩條記錄,value_list 數量必須和定義表的列的數量及順序一致 INSERT INTO students VALUES (100, 10000, '唐三藏', NULL); Query OK, 1 row affected (0.02 sec)INSERT INTO students VALUES (101, 10001, '孫悟空', '11111'); Query OK, 1 row affected (0.02 sec)-- 查看插入結果 SELECT * FROM students; +-----+-------+-----------+-------+ | id | sn | name | qq | +-----+-------+-----------+-------+ | 100 | 10000 | 唐三藏 | NULL | | 101 | 10001 | 孫悟空 | 11111 | +-----+-------+-----------+-------+ 2 rows in set (0.00 sec)

1.2 多行數據 + 指定列插入:

-- 插入兩條記錄,value_list 數量必須和指定列數量及順序一致 INSERT INTO students (id, sn, name) VALUES (102, 20001, '曹孟德'), (103, 20002, '孫仲謀'); Query OK, 2 rows affected (0.02 sec) Records: 2 Duplicates: 0 Warnings: 0-- 查看插入結果 SELECT * FROM students; +-----+-------+-----------+-------+ | id | sn | name | qq | +-----+-------+-----------+-------+ | 100 | 10000 | 唐三藏 | NULL | | 101 | 10001 | 孫悟空 | 11111 | | 102 | 20001 | 曹孟德 | NULL | | 103 | 20002 | 孫仲謀 | NULL | +-----+-------+-----------+-------+ 4 rows in set (0.00 sec)

1.3 插入否則更新:

由于 主鍵 或者 唯一鍵 對應的值已經存在而導致插入失敗

-- 主鍵沖突 INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大師'); ERROR 1062 (23000): Duplicate entry '100' for key 'PRIMARY'-- 唯一鍵沖突 INSERT INTO students (sn, name) VALUES (20001, '曹阿瞞'); ERROR 1062 (23000): Duplicate entry '20001' for key 'sn'

可以選擇性的進行同步更新操作 語法:

INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ... INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大師') ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大師'; Query OK, 2 rows affected (0.47 sec) -- 0 row affected: 表中有沖突數據,但沖突數據的值和 update 的值相等 -- 1 row affected: 表中沒有沖突數據,數據被插入 -- 2 row affected: 表中有沖突數據,并且數據已經被更新 -- 通過 MySQL 函數獲取受到影響的數據行數 SELECT ROW_COUNT(); +-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+ 1 row in set (0.00 sec)

1.4 替換:

-- 主鍵 或者 唯一鍵 沒有沖突,則直接插入; -- 主鍵 或者 唯一鍵 如果沖突,則刪除后再插入 REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞞'); Query OK, 2 rows affected (0.00 sec) -- 1 row affected: 表中沒有沖突數據,數據被插入 -- 2 row affected: 表中有沖突數據,刪除后重新插入

2. Retrieve

語法:

SELECT [DISTINCT] {* | {column [, column] ...} [FROM table_name] [WHERE ...] [ORDER BY column [ASC | DESC], ...] LIMIT ...

案例:

-- 創建表結構 CREATE TABLE exam_result ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL COMMENT '同學姓名', yuwen float DEFAULT 0.0 COMMENT '語文成績', shuxue float DEFAULT 0.0 COMMENT '數學成績', yingyu float DEFAULT 0.0 COMMENT '英語成績' ); -- 插入測試數據 INSERT INTO exam_result (name, yuwen, shuxue, yingyu) VALUES ('唐三藏', 67, 98, 56), ('孫悟空', 87, 78, 77), ('豬悟能', 88, 98, 90), ('曹孟德', 82, 84, 67), ('劉玄德', 55, 85, 45), ('孫權', 70, 73, 78), ('宋公明', 75, 65, 30); Query OK, 7 rows affected (0.00 sec) Records: 7 Duplicates: 0 Warnings: 0

2.1 SELECT 列

2.1.1 全列查詢:

-- 通常情況下不建議使用 * 進行全列查詢 -- 1. 查詢的列越多,意味著需要傳輸的數據量越大; -- 2. 可能會影響到索引的使用。(索引待后面課程講解) SELECT * FROM exam_result; +----+-----------+-------+--------+--------+ | id | name | yuwen | shuxue | yingyu | +----+-----------+-------+--------+--------+ | 1 | 唐三藏 | 67 | 98 | 56 | | 2 | 孫悟空 | 87 | 78 | 77 | | 3 | 豬悟能 | 88 | 98 | 90 | | 4 | 曹孟德 | 82 | 84 | 67 | | 5 | 劉玄德 | 55 | 85 | 45 | | 6 | 孫權 | 70 | 73 | 78 | | 7 | 宋公明 | 75 | 65 | 30 | +----+-----------+-------+--------+--------+ 7 rows in set (0.00 sec)

2.1.2 指定列查詢:

-- 指定列的順序不需要按定義表的順序來 SELECT id, name, yingyu FROM exam_result; +----+-----------+--------+ | id | name | yingyu | +----+-----------+--------+ | 1 | 唐三藏 | 56 | | 2 | 孫悟空 | 77 | | 3 | 豬悟能 | 90 | | 4 | 曹孟德 | 67 | | 5 | 劉玄德 | 45 | | 6 | 孫權 | 78 | | 7 | 宋公明 | 30 | +----+-----------+--------+ 7 rows in set (0.00 sec)

2.1.3 查詢字段為表達式:

-- 表達式不包含字段 SELECT id, name, 10 FROM exam_result; +----+-----------+----+ | id | name | 10 | +----+-----------+----+ | 1 | 唐三藏 | 10 | | 2 | 孫悟空 | 10 | | 3 | 豬悟能 | 10 | | 4 | 曹孟德 | 10 | | 5 | 劉玄德 | 10 | | 6 | 孫權 | 10 | | 7 | 宋公明 | 10 | +----+-----------+----+ 7 rows in set (0.00 sec) -- 表達式包含一個字段 SELECT id, name, yingyu + 10 FROM exam_result; +----+-----------+-------------+ | id | name | yingyu + 10 | +----+-----------+-------------+ | 1 | 唐三藏 | 66 | | 2 | 孫悟空 | 87 | | 3 | 豬悟能 | 100 | | 4 | 曹孟德 | 77 | | 5 | 劉玄德 | 55 | | 6 | 孫權 | 88 | | 7 | 宋公明 | 40 | +----+-----------+-------------+ 7 rows in set (0.00 sec) -- 表達式包含多個字段 SELECT id, name, yuwen + shuxue + yingyu FROM exam_result; +----+-----------+-------------------------+ | id | name | yuwen + shuxue + yingyu | +----+-----------+-------------------------+ | 1 | 唐三藏 | 221 | | 2 | 孫悟空 | 242 | | 3 | 豬悟能 | 276 | | 4 | 曹孟德 | 233 | | 5 | 劉玄德 | 185 | | 6 | 孫權 | 221 | | 7 | 宋公明 | 170 | +----+-----------+-------------------------+ 7 rows in set (0.00 sec)

2.1.4 為查詢結果指定別名:

語法:

SELECT column [AS] alias_name [...] FROM table_name; SELECT id, name, yuwen + shuxue + yingyu 總分 FROM exam_result; +----+-----------+--------+ | id | name | 總分 | +----+-----------+--------+ | 1 | 唐三藏 | 221 | | 2 | 孫悟空 | 242 | | 3 | 豬悟能 | 276 | | 4 | 曹孟德 | 233 | | 5 | 劉玄德 | 185 | | 6 | 孫權 | 221 | | 7 | 宋公明 | 170 | +----+-----------+--------+ 7 rows in set (0.00 sec)

2.1.5 結果去重:

-- 98 分重復了 SELECT shuxue FROM exam_result; +--------+ | shuxue | +--------+ | 98 | | 78 | | 98 | | 84 | | 85 | | 73 | | 65 | +--------+ 7 rows in set (0.00 sec) -- 去重結果 SELECT DISTINCT shuxue FROM exam_result; +--------+ | shuxue | +--------+ | 98 | | 78 | | 84 | | 85 | | 73 | | 65 | +--------+ 6 rows in set (0.00 sec)

2.2 WHERE 條件

比較運算符:

邏輯運算符:

案例:

2.2.1 英語不及格的同學及英語成績 ( < 60 ):

-- 基本比較 SELECT name, yingyu FROM exam_result WHERE yingyu < 60; +-----------+--------+ | name | yingyu | +-----------+--------+ | 唐三藏 | 56 | | 劉玄德 | 45 | | 宋公明 | 30 | +-----------+--------+ 3 rows in set (0.01 sec)

2.2.2 語文成績在 [80, 90] 分的同學及語文成績:

-- 使用 AND 進行條件連接 SELECT name, yuwen FROM exam_result WHERE yuwen >= 80 AND yuwen <= 90; +-----------+-------+ | name | yuwen | +-----------+-------+ | 孫悟空 | 87 | | 豬悟能 | 88 | | 曹孟德 | 82 | +-----------+-------+ 3 rows in set (0.00 sec) -- 使用 BETWEEN ... AND ... 條件 SELECT name, yuwen FROM exam_result WHERE yuwen BETWEEN 80 AND 90; +-----------+-------+ | name | yuwen | +-----------+-------+ | 孫悟空 | 87 | | 豬悟能 | 88 | | 曹孟德 | 82 | +-----------+-------+ 3 rows in set (0.00 sec)

2.2.3 數學成績是 58 或者 59 或者 98 或者 99 分的同學及數學成績:

-- 使用 OR 進行條件連接 SELECT name, shuxue FROM exam_result WHERE shuxue = 58 OR shuxue = 59 OR shuxue = 98 OR shuxue = 99; +-----------+--------+ | name | shuxue | +-----------+--------+ | 唐三藏 | 98 | | 豬悟能 | 98 | +-----------+--------+ 2 rows in set (0.01 sec) -- 使用 IN 條件 SELECT name, shuxue FROM exam_result WHERE shuxue IN (58, 59, 98, 99); +-----------+--------+ | name | shuxue | +-----------+--------+ | 唐三藏 | 98 | | 豬悟能 | 98 | +-----------+--------+ 2 rows in set (0.00 sec)

2.2.4 姓孫的同學 及 孫某同學:

-- % 匹配任意多個(包括 0 個)任意字符 SELECT name FROM exam_result WHERE name LIKE '孫%'; +-----------+ | name | +-----------+ | 孫悟空 | | 孫權 | +-----------+ 2 rows in set (0.00 sec) -- _ 匹配嚴格的一個任意字符 SELECT name FROM exam_result WHERE name LIKE '孫_'; +--------+ | name | +--------+ | 孫權 | +--------+ 1 row in set (0.00 sec)

2.2.5 語文成績好于英語成績的同學:

-- WHERE 條件中比較運算符兩側都是字段 SELECT name, yuwen, yingyu FROM exam_result WHERE yuwen > yingyu; +-----------+-------+--------+ | name | yuwen | yingyu | +-----------+-------+--------+ | 唐三藏 | 67 | 56 | | 孫悟空 | 87 | 77 | | 曹孟德 | 82 | 67 | | 劉玄德 | 55 | 45 | | 宋公明 | 75 | 30 | +-----------+-------+--------+ 5 rows in set (0.00 sec)

2.2.6 總分在 200 分以下的同學:

-- WHERE 條件中使用表達式 -- 別名不能用在 WHERE 條件中 SELECT name, yuwen + shuxue + yingyu 總分 FROM exam_result WHERE yuwen + shuxue + yingyu < 200; +-----------+--------+ | name | 總分 | +-----------+--------+ | 劉玄德 | 185 | | 宋公明 | 170 | +-----------+--------+ 2 rows in set (0.00 sec)

2.2.7 語文成績 > 80 并且不姓孫的同學:

-- AND 與 NOT 的使用 SELECT name, yuwen FROM exam_result WHERE yuwen > 80 AND name NOT LIKE '孫%'; +----+-----------+-------+--------+--------+ | id | name | yuwen | shuxue | yingyu | +----+-----------+-------+--------+--------+ | 3 | 豬悟能 | 88 | 98 | 90 | | 4 | 曹孟德 | 82 | 84 | 67 | +----+-----------+-------+--------+--------+ 2 rows in set (0.00 sec)

2.2.8 孫某同學,否則要求總成績 > 200 并且 語文成績 < 數學成績 并且 英語成績 > 80:

-- 綜合性查詢 SELECT name, yuwen, shuxue, yingyu, yuwen + shuxue + yingyu 總分 FROM exam_result WHERE name LIKE '孫_' OR ( yuwen + shuxue + yingyu > 200 AND yuwen < shuxue AND yingyu > 80 ); +-----------+-------+--------+--------+--------+ | name | yuwen | shuxue | yingyu | 總分 | +-----------+-------+--------+--------+--------+ | 豬悟能 | 88 | 98 | 90 | 276 | | 孫權 | 70 | 73 | 78 | 221 | +-----------+-------+--------+--------+--------+ 2 rows in set (0.00 sec)

2.2.9 NULL 的查詢:

-- 查詢 students 表 +-----+-------+-----------+-------+ | id | sn | name | qq | +-----+-------+-----------+-------+ | 100 | 10010 | 唐大師 | NULL | | 101 | 10001 | 孫悟空 | 11111 | | 103 | 20002 | 孫仲謀 | NULL | | 104 | 20001 | 曹阿瞞 | NULL | +-----+-------+-----------+-------+ 4 rows in set (0.00 sec)-- 查詢 qq 號已知的同學姓名 SELECT name, qq FROM students WHERE qq IS NOT NULL; +-----------+-------+ | name | qq | +-----------+-------+ | 孫悟空 | 11111 | +-----------+-------+ 1 row in set (0.00 sec)-- NULL 和 NULL 的比較,= 和 <=> 的區別 SELECT NULL = NULL, NULL = 1, NULL = 0; +-------------+----------+----------+ | NULL = NULL | NULL = 1 | NULL = 0 | +-------------+----------+----------+ | NULL | NULL | NULL | +-------------+----------+----------+ 1 row in set (0.00 sec)SELECT NULL <=> NULL, NULL <=> 1, NULL <=> 0; +---------------+------------+------------+ | NULL <=> NULL | NULL <=> 1 | NULL <=> 0 | +---------------+------------+------------+ | 1 | 0 | 0 | +---------------+------------+------------+ 1 row in set (0.00 sec)

2.3 結果排序

語法:

-- ASC 為升序(從小到大) -- DESC 為降序(從大到小) -- 默認為 ASC SELECT ... FROM table_name [WHERE ...] ORDER BY column [ASC|DESC], [...];

注意:沒有 ORDER BY 子句的查詢,返回的順序是未定義的,永遠不要依賴這個順序

案例:

2.3.1 同學及數學成績,按數學成績升序顯示:

SELECT name, shuxue FROM exam_result ORDER BY shuxue; +-----------+--------+ | name | shuxue | +-----------+--------+ | 宋公明 | 65 | | 孫權 | 73 | | 孫悟空 | 78 | | 曹孟德 | 84 | | 劉玄德 | 85 | | 唐三藏 | 98 | | 豬悟能 | 98 | +-----------+--------+ 7 rows in set (0.00 sec)

2.3.2 同學及 qq 號,按 qq 號排序顯示:

-- NULL 視為比任何值都小,升序出現在最上面 SELECT name, qq FROM students ORDER BY qq; +-----------+-------+ | name | qq | +-----------+-------+ | 唐大師 | NULL | | 孫仲謀 | NULL | | 曹阿瞞 | NULL | | 孫悟空 | 11111 | +-----------+-------+ -- NULL 視為比任何值都小,降序出現在最下面 SELECT name, qq FROM students ORDER BY qq DESC; +-----------+-------+ | name | qq | +-----------+-------+ | 孫悟空 | 11111 | | 唐大師 | NULL | | 孫仲謀 | NULL | | 曹阿瞞 | NULL | +-----------+-------+ 4 rows in set (0.00 sec)

2.3.3 查詢同學各門成績,依次按 數學降序,英語升序,語文升序的方式顯示:

-- 多字段排序,排序優先級隨書寫順序 SELECT name, shuxue, yingyu, yuwen FROM exam_result ORDER BY shuxue DESC, yingyu, yuwen; +-----------+--------+--------+-------+ | name | shuxue | yingyu | yuwen | +-----------+--------+--------+-------+ | 唐三藏 | 98 | 56 | 67 | | 豬悟能 | 98 | 90 | 88 | | 劉玄德 | 85 | 45 | 55 | | 曹孟德 | 84 | 67 | 82 | | 孫悟空 | 78 | 77 | 87 | | 孫權 | 73 | 78 | 70 | | 宋公明 | 65 | 30 | 75 | +-----------+--------+--------+-------+ 7 rows in set (0.00 sec)

2.3.4 查詢同學及總分,由高到低:

-- ORDER BY 中可以使用表達式 SELECT name, yuwen + yingyu + shuxue FROM exam_result ORDER BY yuwen + yingyu + shuxue DESC; +-----------+-------------------------+ | name | yuwen + yingyu + shuxue | +-----------+-------------------------+ | 豬悟能 | 276 | | 孫悟空 | 242 | | 曹孟德 | 233 | | 唐三藏 | 221 | | 孫權 | 221 | | 劉玄德 | 185 | | 宋公明 | 170 | +-----------+-------------------------+ 7 rows in set (0.00 sec) -- ORDER BY 子句中可以使用列別名 SELECT name, yuwen + yingyu + shuxue 總分 FROM exam_result ORDER BY 總分 DESC; +-----------+--------+ | name | 總分 | +-----------+--------+ | 豬悟能 | 276 | | 孫悟空 | 242 | | 曹孟德 | 233 | | 唐三藏 | 221 | | 孫權 | 221 | | 劉玄德 | 185 | | 宋公明 | 170 | +-----------+--------+ 7 rows in set (0.00 sec)

2.3.5 查詢姓孫的同學或者姓曹的同學數學成績,結果按數學成績由高到低顯示:

-- 結合 WHERE 子句 和 ORDER BY 子句 SELECT name, shuxue FROM exam_result WHERE name LIKE '孫%' OR name LIKE '曹%' ORDER BY shuxue DESC; +-----------+--------+ | name | shuxue | +-----------+--------+ | 曹孟德 | 84 | | 孫悟空 | 78 | | 孫權 | 73 | +-----------+--------+ 3 rows in set (0.00 sec)

2.4 篩選分頁結果

語法:

-- 起始下標為 0 -- 從 0 開始,篩選 n 條結果 SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n; -- 從 s 開始,篩選 n 條結果 SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n; -- 從 s 開始,篩選 n 條結果,比第二種用法更明確,建議使用 SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET n;

建議:對未知表進行查詢時,最好加一條 LIMIT 1,避免因為表中數據過大,查詢全表數據導致數據庫卡死按。 id 進行分頁,每頁 3 條記錄,分別顯示 第 1、2、3 頁

-- 第 1 頁 SELECT id, name, shuxue, yingyu, yuwen FROM exam_result ORDER BY id LIMIT 3 OFFSET 0; +----+-----------+--------+--------+-------+ | id | name | shuxue | yingyu | yuwen | +----+-----------+--------+--------+-------+ | 1 | 唐三藏 | 98 | 56 | 67 | | 2 | 孫悟空 | 78 | 77 | 87 | | 3 | 豬悟能 | 98 | 90 | 88 | +----+-----------+--------+--------+-------+ 3 rows in set (0.02 sec)


總結

以上是生活随笔為你收集整理的MySQL的基本查询(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。