数据库的增删改查
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库的增删改查相关的知识,希望对你有一定的参考价值。
数据库增删改查(重点重点重点)
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,。。。值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 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;
以上是关于数据库的增删改查的主要内容,如果未能解决你的问题,请参考以下文章