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;

数据库的增删改查语法和多表联查方式相关推荐

  1. Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法)

    Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法) 目录 自定义创建数据库的各种表demo集合 具体案例 1.学生信息数据表案例

  2. Android SQL语句实现数据库的增删改查

    本文介绍android中的数据库的增删改查 复习sql语法: * 增 insert into info (name,phone) values ('wuyudong','111') * 删 delet ...

  3. JDBC-03:PreparedStatement如何实现对数据库的增删改查操作

    文章目录 一.使用PreparedStatement实现CRUD操作 (1)使用PreparedStatement实现增删改操作 1.PreparedStatement介绍 2.实现数据库的添加操作 ...

  4. python数据库的增删改查_Python|实现数据库的增删改查

    Python|实现数据库的增删改查 2020-10-05 1 前言最近在学flask网页制作,需要用到数据库相关知识,在经过初步学习后实现了用python来实现数据库的相关操作,即增删改查.2 前提条 ...

  5. jdbc如何对mysql数据库进行查询_【转载】通过JDBC对MySQL数据库的增删改查

    目录 前言:什么是JDBC 维基百科的简介: Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接 ...

  6. adodb mysql.inc.php,php adodb操作mysql数据库示例(增删改查)

    php adodb操作mysql数据库示例(增删改查) 发布于 2014-10-05 08:16:18 | 113 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: H ...

  7. mysql增删改查要用事务吗_数据库的增删改查、事务与索引

    数据库的增删改查.事务与索引 增删改查 一.查询(SELECT) 二.添加(INSERT) 三.删除(DELETE) 四.更改(UPDATE) 事务 一.事务的概念 二.MySQL数据库中操作事务命令 ...

  8. 数据库的增删改查(SELECT、DELETE、UPDATE、INSERT)

    数据库的增删改查 我使用的是Northwind数据库来进行说明和显示 一.查询---select 一.简单查询   select 的语法:select  列名称  from  表名称  (其中  * ...

  9. php修改数据库字段内容,php对数据库的增删改查操作

    在我看来数据库是个既复杂又高深莫测的东西,但百分之八十左右的程序员都不需要去精通他,对于我们前端开发来说,只要会数据库的增删改查语句就差不多了.首先我们来说说sql的增删改查语句. 一.增删改查 插入 ...

最新文章

  1. 计算机视觉:图像检测和图像分割有什么区别?
  2. quo,vadis_Quo Vadis JUnit
  3. 外部表不是预期的格式_超详细的CMDB介绍--概念、架构、模型、表设计及开源选择...
  4. python 读取文件
  5. 第2章 状态机思维与状态机变量
  6. lgg6可以root的版本_Kali Linux 2020.1版本变更内容
  7. drop sql语句_用于从表中删除数据SQL Drop View语句
  8. 腾讯云服务器CentOS安装JDK+Tomcat+MySQL详细步骤(以及遇到的各种坑)
  9. 无锡太湖学院计算机科学与技术宿舍,无锡太湖学院宿舍怎么样
  10. mysql 查询表总行数字段_MySQL的count(*)的优化,获取千万级数据表的总行数
  11. Linux用户环境变量及操作
  12. MonkeyEye电影售票系统--系统顺序图
  13. win7安装中文语言包
  14. 世界读书日 | 技术人不要错过的好书(IT前沿技术)
  15. Mybatis与JPA的优缺点
  16. 浅谈短视频APP的发展趋势
  17. KALI虚拟机挂代理教程
  18. 微信小程序实现缓存过期时间
  19. 免费文本转语音(在线文本转语音)
  20. HBBuilderProjest逆向分析与安全性扯淡

热门文章

  1. 综述:3D目标检测多模态融合算法
  2. ConcurrentHashMap详解
  3. matlab中标点符号的功能
  4. esxi主机添加缓存配置
  5. 关于游戏里面装备有概率掉落、套装收集问题的matlab模拟编程
  6. CAD制图初学入门绘图
  7. [ 2019-12-15第十八次CCF计算机软件能力认证]总结 Apare_xzc
  8. 基于Android开发游戏,在百度手机应用里面上线
  9. MySQL数据库最大连接数如何设置才合理呢?
  10. 新电脑U盘安装Win7过程中卡死(Skylake)