数据库的增删改查语法和多表联查方式
1.sql组成
DDL:定义语言 创库、表、修删库、表 对数据库操作
DML:操作语言 增删改 对数据库操作
DQL:查询语言 查询 对数据库操作
DCL:控制语言 用户、权限等操作 对数据库操作
TCL:事务控制语言 对事务操作
2.DML操作语言(对数据库数据 增、删、改 操作命令)
a.添加
插入1条
insert into test(name,address) values ('张三','北京');
--推荐使用
插入多条可多写几条以上语句一起执行或参照以下:
insert into test(name,address) values ('张三','北京'),('李四','北京'),('张三','王五');
注意:
id可填可不填,设置id自动增长情况下。
向表中插入的数据要是一条完整的记录数据,不能只插入一半的数据。
插入语句中列名与列值一一对应(个数一致,数据类型匹配,位置匹配)
insert into 表名 values('张三','北京');
注意:
所有的列必须全部插入数据。
标识id列的数据可以自动增长也可以手动插入数据。
#允许为null列如果是字符串列,可以插入null
insert into t_user(uid,uname,age,address) values (2,'小明',18,null);
insert into t_user(uid,uname,age) values (3,'小强',18);
b.修改
语法:update 表名 set 列名1=新值1,列名2=新值2...[where 条件] 注意:一般情况下,修改一定要加条件,否则修改的就是整张表的数据。
eg:
修改整张表中数据(尽量不用) 把整张表uname改为夏雨,address改为中国
update t_user set uname='夏雨',address='中国';
修改表中数据 修改uid第1行的uname字段值,改为:冯尉明
update t_user set uname='冯尉明' where uid=1;
c、删除
语法一:delete from 表名 [where 条件];
注意:一般情况下,删除表中数据一定要加条件,否则删除整张表的数据.
delete删除记录行后,标识数据删除后,标识数据不再重复
eg:
删除表中数据 -删除uid第5行数据
delete from t_user where uid=5;
一般情况下,删除要加where条件,否则删除整张表中数据.
delete from t_user;
删除表中所有记录
第一种:drop table 表名; 删除最彻底,将整张表及与表相关的数据(包括表结构,表中数据,标识种子)全部删除.
第二种:truncate table 表名;删除效率最高,将表中数据一页一页的删除,但是表的结构还在(将原表删除,新建一个与原表结构相同的表),原来表中标识种子也删除了重新生成新的标识种子.
eg:
删除表中数据效率最高
TRUNCATE table t_user;
第三种:delete from 表名;只删除了表中数据(一条一条删除表中记录),表的结构,表的标识种子都在.
注意:标识种子:指的标识列的起始值.标识种子删除后,无法再继续自增.
3.DML操作语言(对数据库数据 查询操作命令)
语法:select 列名1,列名2,...from 表名; (推荐)
select * from 表名; (属于模糊查询,效率比上面的低)
eg:
1.查询表中所有的记录
select * from t_student;
select sid,sname,sage,sex,address from t_student; -- 推荐
2、根据条件查询
语法:select 列名1,列名2,...from 表名 where 条件;
eg:
边查询边筛选:查询年龄小于20岁的所有的学生信息
select sid,sname,sage,sex,address from t_student where sage<20;
3、查询完后对结果进行排序
语法:select 列名1,列名2,...from 表名 order by 列名1...;
eg:
查询完后对结果进行一个列的排序:查询学生信息,按学号来排/按姓名排序
select sid,sname,sage,sex,address from t_student order by sname;
查询完后对结果进行多个列的排序:查询学生信息,先姓名排序,再按年龄排序
select sid,sname,sage,sex,address from t_student order by sname asc,sage desc;
4、聚合函数
sum()求总和、max()最大值、min()最小值、avg()求平均值、count()求总记录数.
注意:
1、一般情况下,普通列不能与聚合函数列一起使用(语法上可以,但逻辑上有问题), 结果集无法匹配,除非普通列作为分组条件就可以和聚合函数列一起使用
2、 聚合函数不能用在where后,其他关键字后面可以用.
eg:
聚合函数查询
select count(sid),sum(sage),max(sage),min(sage),avg(sage) from t_student;
一般情况下,普通不能与聚合函数列一起使用(语法上可以,但逻辑上有问题),结果集无法匹配
select sname,count(sid) from t_student; --逻辑问题,所有名字,id总记录数
5、模糊查询
通配符:一种特殊符号,每种符号有特定含义
*: 代表表中所有列
_: 代表一个任意字符
%: 代表任意长度的任意字符
5.1:like查询
语法:select 列名1,列名2... from 表名 where 列名 like 通配符;
注意:like一般要与通配符配合使用,能用Like查询的列是字符串列。
eg:
#like模糊查询:查询所有姓王的学生
select sid,sname,sage,sex,address
from t_student
where sname like '王%';
5.3:between...and...
语法:select 列名1,列名2... from 表名 where 列名 between 小值 and 大值;
注意:
between...and...适用于数据列;
between...and...小范围的值写在前面,大范围的值写在后面.反之,语法不报错,但是无意义.
eg:
BETWEEN and: 查询年龄在18到20岁的所有的学生信息
1、
select sid,sname,sage,sex,address
from t_student
where sage>=18 and sage<=20;
2、
select sid,sname,sage,sex,address
from t_student
where sage BETWEEN 18 and 20;
5.4:in(值1,值2...)
语法:select 列名1,列名2... from 表名 where 列名 in(值1,值2...);
IN 操作符允许我们在 WHERE 子句中规定多个值。
eg:
in:查询年龄在18到20岁的所有的学生信息
select sid,sname,sage,sex,address
from t_student
where sage in(18,19,20);
使用 OR
select sid,sname,sage,sex,address
from t_student
where sage=18 or sage=19 or sage=20;
使用 OR 来显示所有姓为 "xxx" 或者名为 "yyy" 的人:
select sid,sname,sage,sex,address
from t_student
where sname='xxx' or sname='yyy';
in:查询地址是太白里1或者是太白里2
select sid,sname,sage,sex,address
from t_student
where address in('太白里1','太白里2');
使用 OR
select sid,sname,sage,sex,address
from t_student
where address='太白里1' or address='太白里2'
5.5:is [not] null
语法:select 列名1,列名2... from 表名 where 列名 is null;
eg:is null/is not NULL
查询不到数据
select sid,sname,sage,sex,address
from t_student
where sage = null;
查询不到数据
select sid,sname,sage,sex,address
from t_student
where sage is null;
查询不不为null的数据
select sid,sname,sage,sex,address
from t_student
where sage is not null;
6、分组查询和筛选
6.1:分组查询
语法:select 列1,列2...from 表名 group by 列名1,列名2;
eg:
分组查询:分别查询出男生和女生的总人数
select sex,count(sid)
from t_student
GROUP BY sex
6.2.分组查询后再筛选
语法:select 列1,列2...from 表名 group by 列名1,列名2 having 条件;
注意:有having的地方一定有group by,但是有group by的地方不一定有having.
分组查询后筛选:按性别分组查询,查询出总人数大于6的性别
select sex,count(sid)
from t_student
GROUP BY sex
having count(sid)>6
7、limit分页
7.1:限制输出记录条数
语法:select 列名1,列名2,...from 表名 limit 记录数;
eg:
limit:限制输出记录条数;查询出学生表中前三条记录
select sid,sname,sage,sex,address
from t_student
limit 3;
7.2:分页
语法:select 列名1,列名2,...from 表名 limit 每页起始记录数,每页显示的记录条数;
eg:
limit:对数据进行分页: 每页显示5条记录数,查询出第三页
select sid,sname,sage,sex,address
from t_student
limit 10,5;
分页总语法:select 列名1,列名2,...from 表名
limit (当前页码-1)*每页显示的记录条数;
8、distinct:去重(MySql,Oracle)
eg:
DISTINCT:如果有多条记录结果相同去重
select DISTINCT sex from t_student;
4.多表联查方式
一、多表
1、多表中常用概念
主表:当前表中主键列被其他的表引用,当前表叫主表,主表一定要有主键。
子表(从表):当前表中引用其他表中列,当前表叫子表。
公共列:俩个或以上表中表示相同意思的列叫公共列。一般情况下,公共列的列名相同
但是公共列的列名也可以不相同。
2、多表之间的关系
一对一:在任何一方引用另一方表中主键都可以建立关系。
一个女人只能有一个老公,一个男人只能有一个老婆。
一对多:在多的一方的表中,引用一的一方表中主键来建立关系。
一个班级有多名学生,但是一个学生只属于一个班级。
多对多:建立第三张表,在第三张表中引用俩张多的表中主键来建立关系。
一个老师可以教多名学生,一名学生也可以有多位老师。
二、联表
多张表连在一起共同查询数据,联表查询条件,表与表之间一定要有公共列,才能进行联表查询、
1、内连接:
将2张或2张以上表进行联合查询数据,表与表之间的关系是平等的,2张表中有对应的数据就显示。
语法1:
select 列名列表 from 表名1 , 表名2, 表名3
where 表名1 .公共列=表名2.公共列
and 表名2.公共列=表名3.公共列
and 条件;
语法2:
select 列名列表 from 表名1
inner join 表名2 on 表名1.公共列=表名2.公共列
inner join 表名3 on 表名1.公共列=表名3.公共列
注意:n张表,只能建立n-1个桥梁(公共列关系)
公共列cid 主表 子表 联合查询
#内联接:查询所有学生姓名和班级名称。
select sname,cname
from t_student,t_class
where t_student.cid=t_class.cid;
select sname,cname
from t_student
inner JOIN t_class on t_student.cid=t_class.cid;
select sname,cname,t_student.cid
from t_student
inner JOIN t_class on t_student.cid=t_class.cid;
2、外连接:
2张或2张以上的表进行联合查询数据,注意查询表中数据全部显示,次要查询表中数据有对应的数据就显示,没有对应数据以空值显示,如果是次要查询表中有的数据,注意查询的表中没有之对应的数据就不显示。
2.1、左【外】连接
语法:以左边的边为注意查询的表,右边的表为次要查询的表
语法:
select 列名列表 from 表名1
left [outer] join 表名2 on 表名1.公共列 = 表名2.公共列
left [outer] join 表名3 on 表名2.公共列 = 表名3.公共列
2.2、右【外】连接
语法:以右边的表为主要查询的表,左边的表为次要查询的表。
语法:
select 列名列表 from 表名1
right [outer] join 表名2 on 表名1.公共列=表名2.公共列
right [outer] join 表名3 on 表名2.公共列=表名3.公共列
#外连接:查询所有学生姓名及与学生相关的班级名称
分析:查询学生姓名,班级名称
select sname,cname
from t_student s
LEFT JOIN t_class c on s.cid=c.cid;
#外连接:查询所有班级及与班级相关的学生姓名
select sname,cname
from t_class c
RIGHT JOIN t_student s on c.cid=s.cid;
三、子查询
一个查询结构中嵌套了另一个查询结构
注意:子查询的执行顺序是由内到外。
子查询可以多层嵌套,但是目前一般情况下,2层到3层嵌套比较多。
子查询:查询计算机二班的所有学生姓名及班级编号
先查询出计算机二班班级编码
再查询班级编号查询学生姓名及班级编号
SELECT s.sname,s.cid
from t_student s
where cid=(select cid from t_class where cname='计算机二班');
#方式二、
select s.sname,s.cid
from t_student s
INNER JOIN t_class c on s.cid=c.cid
where c.cname='计算机二班';
注意:
1、能用子查询解决的问题一般情况下可以用联表查询解决。
能用联表查询的问题,不一定能用子查询解决
2、在查询语句中,能有精确查询的就不要用模糊查询。
3、在查询语句中,如果一个题目既可以用联表查询解决,也可以用子查询解决,
优先选用子查询解决
四、联合查询
将查询出来的结果集合并,前提条件:2个或以下查询结果的列名相同才能合并。
相同:union和union all 都可以将查询结果合并。
不同:union 合并结果集后要去除重复的元素,但是union all不能去除重复的元素。
#查询年龄小于20和年龄大于25岁的所有学生信息
select sid,sname,sage,sex,address
from t_student
WHERE sage<20 or sage>25;
1、union(去重)/ union all(不去重)
#查询年龄小于20和年龄大于17岁的所有学生信息
#去重
select sid,sname,sage,sex,address
from t_student
WHERE sage<20
union
select sid,sname,sage,sex,address
from t_student
WHERE sage>17;
#不去重
select sid,sname,sage,sex,address
from t_student
WHERE sage<20
union ALL
select sid,sname,sage,sex,address
from t_student
WHERE sage>17;
数据库的增删改查语法和多表联查方式相关推荐
- Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法)
Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法) 目录 自定义创建数据库的各种表demo集合 具体案例 1.学生信息数据表案例
- Android SQL语句实现数据库的增删改查
本文介绍android中的数据库的增删改查 复习sql语法: * 增 insert into info (name,phone) values ('wuyudong','111') * 删 delet ...
- JDBC-03:PreparedStatement如何实现对数据库的增删改查操作
文章目录 一.使用PreparedStatement实现CRUD操作 (1)使用PreparedStatement实现增删改操作 1.PreparedStatement介绍 2.实现数据库的添加操作 ...
- python数据库的增删改查_Python|实现数据库的增删改查
Python|实现数据库的增删改查 2020-10-05 1 前言最近在学flask网页制作,需要用到数据库相关知识,在经过初步学习后实现了用python来实现数据库的相关操作,即增删改查.2 前提条 ...
- jdbc如何对mysql数据库进行查询_【转载】通过JDBC对MySQL数据库的增删改查
目录 前言:什么是JDBC 维基百科的简介: Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接 ...
- adodb mysql.inc.php,php adodb操作mysql数据库示例(增删改查)
php adodb操作mysql数据库示例(增删改查) 发布于 2014-10-05 08:16:18 | 113 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: H ...
- mysql增删改查要用事务吗_数据库的增删改查、事务与索引
数据库的增删改查.事务与索引 增删改查 一.查询(SELECT) 二.添加(INSERT) 三.删除(DELETE) 四.更改(UPDATE) 事务 一.事务的概念 二.MySQL数据库中操作事务命令 ...
- 数据库的增删改查(SELECT、DELETE、UPDATE、INSERT)
数据库的增删改查 我使用的是Northwind数据库来进行说明和显示 一.查询---select 一.简单查询 select 的语法:select 列名称 from 表名称 (其中 * ...
- php修改数据库字段内容,php对数据库的增删改查操作
在我看来数据库是个既复杂又高深莫测的东西,但百分之八十左右的程序员都不需要去精通他,对于我们前端开发来说,只要会数据库的增删改查语句就差不多了.首先我们来说说sql的增删改查语句. 一.增删改查 插入 ...
最新文章
- 计算机视觉:图像检测和图像分割有什么区别?
- quo,vadis_Quo Vadis JUnit
- 外部表不是预期的格式_超详细的CMDB介绍--概念、架构、模型、表设计及开源选择...
- python 读取文件
- 第2章 状态机思维与状态机变量
- lgg6可以root的版本_Kali Linux 2020.1版本变更内容
- drop sql语句_用于从表中删除数据SQL Drop View语句
- 腾讯云服务器CentOS安装JDK+Tomcat+MySQL详细步骤(以及遇到的各种坑)
- 无锡太湖学院计算机科学与技术宿舍,无锡太湖学院宿舍怎么样
- mysql 查询表总行数字段_MySQL的count(*)的优化,获取千万级数据表的总行数
- Linux用户环境变量及操作
- MonkeyEye电影售票系统--系统顺序图
- win7安装中文语言包
- 世界读书日 | 技术人不要错过的好书(IT前沿技术)
- Mybatis与JPA的优缺点
- 浅谈短视频APP的发展趋势
- KALI虚拟机挂代理教程
- 微信小程序实现缓存过期时间
- 免费文本转语音(在线文本转语音)
- HBBuilderProjest逆向分析与安全性扯淡