1. 程式人生 > >數據庫的增刪改查

數據庫的增刪改查

mysql

數據庫增刪改查(重點重點重點)

1.插入、更新與刪除數據

======================

1.1插入數據

-----------

1) 為表的所有字段插入數據

INSERT INTO 表名 VALUES(字段值);

2INSERT語句中列出所有字段

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

,。。。值n)(1,值2,值3,。。。值n)(1,值2,值3,。。。值n)(1,值2,值3,。。。值n)(1,值2,值3,。。。值n)

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 字段名

ASC|DESC]

[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

匹配字符

LIKE NOT LIKE

是否為空值 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 BYHAVING關鍵字一起使用

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;



數據庫的增刪改查