数据库的增删改查

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库的增删改查相关的知识,希望对你有一定的参考价值。

数据库增删改查(重点重点重点)

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;



以上是关于数据库的增删改查的主要内容,如果未能解决你的问题,请参考以下文章

MySQL-增删改查简易操作

django配置模型增删改查

MySQL基本操作--库表增删改查

库表曾删改查和存储引擎

mysql增删改查

数据库的增删改查?