數據庫的增刪改查
數據庫增刪改查(重點重點重點)
1.插入、更新與刪除數據
======================
1.1插入數據
-----------
1) 為表的所有字段插入數據
INSERT INTO 表名 VALUES(字段值);
2) INSERT語句中列出所有字段
INSERT INTO 表名(字段1,字段2,字段3,。。。字段n) VALUES(值1,值2,值3,、、、值n)
3) 為表的指定字段插入數據
INSERT INTO 表名(指定的字段名1,字段名2 字段名3) VALUES(值1,值2,值3,);
4) 同時插入多條記錄
INSERT INTO 表名(字段列表) VALUES(值1,值2,值3
5) 將查詢結果插入到表中
1.2 更新數據
UPDATE 表名 SET 字段名=值,字段名=值,字段名=值 WHERE id=1
1.3 刪除數據
DELETE FROM info WHERE 條件
註意 一定要給一個where條件 否則出現大問題
2.查詢數據
==========
2.1 基本查詢語句
SELECT 字段列表 FROM 表名
[WHERE 條件表達式]
[GROUP BY 字段名 [HAVING 條件2] ]
[ORDER BY 字段名
[LIMIT]
2.2 單表查詢
------------
1)查詢所有字段
數據量大的時候使用下面標紅的查詢方式
列出所有字段(查詢速度快)
SELECT id,name,age,sex,city FROM 表名
使用*查詢所有字段(查詢速度慢)
SELECT * FROM 表名
2)查詢指定字段
SELECT id,name FROM 表名
3)查詢指定記錄
WHERE 子句的條件:
比較: = < > <= >= != <>
指定範圍: BETWEEN AND NOT BETWEEN AND
指定集合: IN NOT IN
匹配字符
是否為空值 IS NULL IS NOT NULL
多個條件查詢 AND OR
4)帶IN關鍵字查詢
-----------------
IN(字段值,字段值,字段值)
5)帶BETWEEN AND的範圍查詢
--------------------------
BETWEEN 值 AND 值
6)帶LIKE的字符串匹配查詢
-------------------------
% 任意長度的字符串
_ 代表單個字符串
7)查詢空值
-----------
SELECT 字段列表 FROM 表名 where 字段 IS null
8)帶AND的多條件查詢
--------------------
SELECT 字段列表 FROM 表名 WHERE 字段1 And 字段2
9)帶OR的多條件查詢
-----------------------------------------------------------------------------------------
SELECT 字段列表 FROM 表名 WHERE 字段1 or 字段2
10)查詢結果不重復
------------------
select DISTINCT 字段 FROM 表名
11)對查詢結果排序
------------------
ORDER BY
SELECT 字段列表 FROM 表名 ORDER BY 字段名 DESC |ASC
12)分組查詢
------------
1.單獨使用GROUP BY分組
SELECT 字段列表 FROM 表名 GROUP BY 字段名
這樣使用只顯示每個城市的第一個記錄
說明單獨使用GROUP BY 只能顯示每個分組的一條記錄 這樣使用意義不大 所以我們需要配合一下函數來使用
2.GROUP BY關鍵字與GROUP_CONCAT()函數一起使用
SELECT 字段列表,GROUP_CONCAT(字段) FROM 表名 GROUP BY 字段名
3.GROUP BY與集合函數一起使用
count() 統計
4.GROUP BY與HAVING關鍵字一起使用
SELECT 字段,集合函數 FROM 表名 GROUP BY 字段名 HAVING 條件 子條件
13)用LIMIT限制查詢結果的數量
-----------------------------
1.不指定初始值
LIMIT 10
2.指定初始值
LIMIT 初始值(從第幾條數據開始) ,數字
14)使用集合函數查詢
--------------------
count()
sum()
avg()
max()
min()
拼接函數
concat()
=========================================================================
15)為表和字段取別名
--------------------
1.為表取別名
SELECT 字段名 FROM 表名 別名;
2.為字段取別名
SELECT id d FROM 表名
16)關聯查詢
------------
內連查詢是最常用的一種連接查詢 可以查詢 兩個或兩個以上的表
SELECT 字段列表 FROM 表名1 ,表名2 WHERE 表名1.id = 表名2.id
CREATE TABLE IF NOT EXISTS info(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
age TINYINT UNSIGNED NOT NULL DEFAULT 0,
sex TINYINT NOT NULL DEFAULT 0,
city VARCHAR(255) NOT NULL DEFAULT ‘北京‘
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 對所有字段的所有值添加數據
INSERT INTO info VALUES(NULL,‘馬洪祥‘,45,0,‘南京‘);
INSERT INTO info VALUES(NULL,‘文卓‘,38,0,‘南寧‘);
INSERT INTO info VALUES(NULL,‘傑傑‘,0,26,‘成都‘);
-- 列出所有字段
INSERT INTO info(id,name,age,sex,city) VALUES(NULL,‘琳琳‘,16,0,‘成都‘);
INSERT INTO info(id,name,age,sex,city) VALUES(NULL,‘德寶‘,78,1,‘杭州‘);
-- 指定字段插入
INSERT INTO info(name,age,sex) VALUES(‘李想‘,150,2);
INSERT INTO info(name,age,sex) VALUES(‘薛琳‘,17,3);
INSERT INTO info(name,age,sex) VALUES(‘茜茜‘,14,0);
INSERT INTO info(name,age,sex) VALUES(‘李帥想‘,14,0);
-- 同時插入多條數據
INSERT INTO info(id,name,age,sex,city) VALUES(NULL,‘燕燕‘,16,0,‘鄭州‘),(NULL,‘文帥‘,24,1,‘深圳‘),(NULL,‘良良‘,98,2,‘濟南‘),(NULL,‘騷裏‘,84,1,‘寧波‘),(NULL,‘小王子馬黎‘,56,1,‘西安‘),(NULL,‘張三皮‘,110,2,‘徐州‘),(NULL,‘天意哥‘,7,2,‘沈陽‘);
INSERT INTO info(id,name,age,sex,city) VALUES(NULL,‘潔輝‘,2,1,‘鄭州‘),(NULL,‘芳芳‘,18,0,‘西安‘),(null,‘王小二‘,18,1,‘酒店‘),(null,‘王中王‘,255,4,‘雙匯‘),(null,‘小王八‘,255,4,‘河裏‘),(null,‘隔壁老王‘,43,1,‘隔壁‘);
INSERT INTO info(id,name,age,sex,city) VALUES(NULL,‘球球‘,18,1,‘東京hot‘),(null,‘眼袋哥‘,18,1,‘大阪‘),(null,‘白哥‘,18,1,‘北海道‘),(null,‘黑哥‘,18,1,‘歐美‘);
-- 修改數據
UPDATE info SET age=66,sex=0 WHERE id=3;
-- 刪除數據
DELETE FROM info WHERE id=26;
-- 列出所有字段
SELECT id,name,age,sex,city FROM info ;
-- 使用*查詢
SELECT * FROM info;
-- 查詢指定字段
SELECT id,name FROM info;
-- 比較: = < > <= >= != <>
-- 指定範圍: BETWEEN AND NOT BETWEEN AND
-- 指定集合: IN NOT IN
-- 匹配字符 LIKE NOT LIKE
-- 是否為空值 IS NULL IS NOT NULL
-- 多個條件查詢 AND OR
-- 比較: = < > <= >= != <>
SELECT id,name,age,sex,city FROM info WHERE id =10;
SELECT id,name,age,sex,city FROM info WHERE id <10;
SELECT id,name,age,sex,city FROM info WHERE id >10;
SELECT id,name,age,sex,city FROM info WHERE id <=10;
SELECT id,name,age,sex,city FROM info WHERE id >=10;
SELECT id,name,age,sex,city FROM info WHERE id !=10;
SELECT id,name,age,sex,city FROM info WHERE id <>10;
-- 指定範圍: BETWEEN AND NOT BETWEEN AND id大於等於15而且 小於等於20
SELECT id,name,age,sex,city FROM info WHERE age BETWEEN 15 AND 20;
SELECT id,name,age,sex,city FROM info WHERE age NOT BETWEEN 15 AND 20;
-- 指定集合: IN NOT IN
SELECT id,name,sex,age,city FROM info WHERE id IN(22,7,14,15,2);
SELECT id,name,sex,age,city FROM info WHERE id NOT IN(22,7,14,15,2);
-- 匹配字符 LIKE NOT LIKE
-- 模糊查詢 字符 _代表一個字符 %代表0 1 多個字符
SELECT id,name,sex,age,city FROM info WHERE name LIKE ‘李_‘;
SELECT id,name,sex,age,city FROM info WHERE name LIKE ‘李__‘;
-- 以指定字符開頭
SELECT id,name,sex,age,city FROM info WHERE name LIKE ‘王%‘;
-- 以指定字符結尾
SELECT id,name,sex,age,city FROM info WHERE name LIKE ‘%王‘;
-- 所有帶中間字符的都出來!!!!
SELECT id,name,sex,age,city FROM info WHERE name LIKE ‘_王%‘;
SELECT id,name,sex,age,city FROM info WHERE name NOT LIKE ‘%王%‘;
-- 是否為空值 IS NULL IS NOT NULL
-- is NULL
SELECT id,name,sex,age,city FROM info WHERE name IS NULL;
-- IS NOT NULL
SELECT id,name,sex,age,city FROM info WHERE name IS NOT NULL;
-- 多個條件查詢 AND OR
-- 查詢出所有帶王字的並且年齡要大於17
-- AND
SELECT id,name,sex,age,city FROM info WHERE name LIKE ‘%王%‘ AND age>17;
-- 查詢出所有帶李字的或者性別為0的數據全部出來
-- OR
SELECT id,name,sex,age,city FROM info WHERE name LIKE ‘%李%‘ OR sex=0;
-- 值查詢性別
SELECT sex FROM info ;
-- 去除查出結果中重復的內容 DISTINCT
SELECT DISTINCT sex FROM info;
-- 請查詢出我們班級中人物的所在地位置
SELECT DISTINCT city FROM info;
-- ORDER BY 排序
-- ASC 從小到大
SELECT id,name,sex,age,city FROM info ORDER BY age ASC;
-- DESC 從大到小
SELECT id,name,sex,age,city FROM info ORDER BY age DESC;
-- ID小於25的 按照id 從大到小排序
-- 如果有where 條件 orderby 需要寫在where條件後面
SELECT id,name,sex,age,city FROM info WHERE id < 25 ORDER BY age DESC;
SELECT id,name,sex,age,city FROM info WHERE id < 25 ORDER BY age DESC,id DESC;
-- 分組查詢
SELECT id,name,sex,age,city FROM info GROUP BY city;
-- GROUP BY 和 GROUP_CONCAT() 合作 GROUP_CONCAT(字段名) 拼接函數
SELECT city,GROUP_CONCAT(name) FROM info GROUP BY city;
-- COUNT統計 ☆☆☆☆☆☆
SELECT city,COUNT(id) FROM info GROUP BY city;
-- GROUP BY 和 HAVING
SELECT city,COUNT(id) FROM info GROUP BY city HAVING COUNT(id)>2;
-- SUM 求合 sum(字段名)
SELECT SUM(age) FROM info;
-- AVG 平均數 AVG(字段名)
SELECT AVG(age) FROM info;
-- 要查詢所有城市人員的平均年齡 而且要從小到大排序
SELECT city,AVG(age) FROM info GROUP BY city ORDER BY AVG(age) ASC;
-- MAX() 最大值
SELECT MAX(age) FROM info;
-- MIN() 最小值
SELECT MIN(age) FROM info;
-- 拼接函數 concat(字段,[字段,字段,字符串]) ☆☆☆☆☆
SELECT CONCAT(id,‘@@‘,name,‘@@‘,age) FROM info;
-- SELECT id,name,sex,age,city FROM info WHERE id<5;
-- limit
-- 不指定初始值 LIMIT 數字
SELECT id,name,sex,age,city FROM info LIMIT 5;
-- 指定初始值 LIMIT 初始值(從第幾條數據開始) ,數字
SELECT id,name,sex,age,city FROM info LIMIT 5,5;
-- 表別名
SELECT id,name,sex,age,city FROM info i;
-- 字段別名
SELECT name ‘姓名‘ FROM info;
SELECT name AS ‘姓名‘ FROM info ;
-- 創建一個小三表
CREATE TABLE IF NOT EXISTS smallsan(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
info_id INT UNSIGNED NOT NULL -- 關聯兩個表
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO smallsan VALUES(NULL,‘鳳鳳‘,27);
INSERT INTO smallsan VALUES(NULL,‘紅紅‘,27);
INSERT INTO smallsan VALUES(NULL,‘如花‘,27);
INSERT INTO smallsan VALUES(NULL,‘石榴姐‘,27);
INSERT INTO smallsan VALUES(NULL,‘小麗‘,11);
INSERT INTO smallsan VALUES(NULL,‘小菲‘,11);
INSERT INTO smallsan VALUES(NULL,‘小冰‘,11);
INSERT INTO smallsan VALUES(NULL,‘小琴‘,11);
INSERT INTO smallsan VALUES(NULL,‘加老濕‘,25);
INSERT INTO smallsan VALUES(NULL,‘李老濕‘,25);
INSERT INTO smallsan VALUES(NULL,‘大木老濕‘,25);
INSERT INTO smallsan VALUES(NULL,‘犀利哥‘,25);
-- 查詢一下 李帥想的所有信息和他的小三們
SELECT i.id,i.name,i.sex,i.age,i.city,s.id,s.name,s.info_id FROM info i,smallsan s WHERE i.id=27 AND i.id = s.info_id;
-- ERROR 1052 (23000): Column ‘id‘ in field list is ambiguous
-- 字段列表中的列“id”是不明確的
-- 查詢一下 騷裏的性別和年齡信息和名字 並且查詢出來他的小三們
SELECT i.name,i.sex,i.age,s.name FROM info i,smallsan s WHERE i.id=s.info_id AND i.id=11;
數據庫的增刪改查