mysql表查询、多表查询(增强查询的使用)子查询、合并查询,外连接,mysql5种约束,自增长
一、查询加强
1、在mysql中,日期类型可以直接比较,需要注意格式

2、%:表示0到多个字符,
_:表示单个字符
exp:显示第二个字符为大写O的所有员工的姓名和工资
select name from table
where name like '_O%';
3、查询某个字符字段为空

4、查询表结构:DESC table(table表示表名)
例:DESC user
二,分页查询
1、基本语法:


数据分组总结:
如果select语句同时包含有group by ,having , limit、order by那么他们的
顺序是group by , having , order by,limit
三、多表查询:多表查询是指基于两个表或多个表的查询
tips:多表查询条件不能少于表的个数-1,否则会出现笛卡尔集
在默认情况下,多表查询时,规则
1,从第一张表中,取出一行和第二张表的每一行进行组合,返回结果【含有两张表的所有列】
2、一共返回的记录数,第一张表行数*第二张表的行数
3、这样多表查询默认处理返回结果,称为笛卡尔集
4、解决这个多表的关键就是要写出正确的过滤条件where
多表查询的自连接:
特点:
1、把同一张表当做两张表使用
2、需要给表取别名,表名 表别名
3、列名不明确,可以指定列的别名
例:

四、mysql表的子查询:子查询是指嵌套在其它SQL语句中的select语句,也叫嵌套语句
单行子查询:单行子查询是指只返回一行数据的子查询语句

多行子查询:多行子查询指返回多行数据的子查询使用关键字in

将子查询当做临时表使用;

all和any的使用:
单列子查询all表示那个子查询中的所有

any表示子查询中的任意一个

多列子查询:查询返回多个列数据的子查询语句

(.*):table.*--->表示table表中的所有列
表复制:自我复制数据(蠕虫复制):为了对某个sql语句进行效率测试,我们需要海量数据时,可以使用此法为表创建海量数据;


考虑去重 my_tab02的记录
/*
思路
(1) 先创建一张临时表 my_tmp , 该表的结构和 my_tab02一样
(2) 把my_tmp 的记录 通过 distinct 关键字 处理后 把记录复制到 my_tmp
(3) 清除掉 my_tab02 记录
(4) 把 my_tmp 表的记录复制到 my_tab02
(5) drop 掉 临时表my_tmp
*/
-- (1) 先创建一张临时表 my_tmp , 该表的结构和 my_tab02一样
create table my_tmp like my_tab02
-- (2) 把my_tmp 的记录 通过 distinct 关键字 处理后 把记录复制到 my_tmp
insert into my_tmp
select distinct * from my_tab02;
-- (3) 清除掉 my_tab02 记录
delete from my_tab02;
-- (4) 把 my_tmp 表的记录复制到 my_tab02
insert into my_tab02
select * from my_tmp;
-- (5) drop 掉 临时表my_tmp
drop table my_tmp;
五。合并查询(为了合并多个select语句的结果,可以使用集合操作符号union,
union all)进行合并
1、union all 就是将两个查询结果合并,不会去重

2、union的操作与union all 相似,但是会自动去掉结果中重复行

六、mysql表外连接

1、左外连接 :select .. from 表1 left join 表2 on 条件;【表1就是左表】
如果有字段不匹配,就会显示空

2、右外连接

七、mysql约束
基本介绍:约束用于确保数据库的数据满足特定的商业规则。在mysql中,约束包括:
not null、unique,primary key,foreign key,和check五种.
1、主键的使用:primary key:
细节:
1)primary key 不能重复,而且不能为null。
2)一张表最多只能有一个主键,但可以是复合主键
在表中添加:primary key(字段一,字段二);(其中字段一和字段二就是一个复合主键)只有当字段一二完全相同是才违反主键定义

主键的指定方式:
1)直接在字段名后指定:字段名 primary key
2)在表定义最后写primary key(列名)
3)使用desc表名,可以看到primary key的情况
2、not null(非空):如果在列定义了not null,那么当插入数据时,必须为列提供数据。

3、unique(唯一):当定义了唯一约束后,该列值是不能重复的。

unique细节:
1).如果没有指定not null,则unique字段可以有多个null
2).一张表可以有多个unique字段
3)、如果一个列(字段),是unique not null使用效果类似primary key;
4、foreign key(外键)
用于定义主表和从表之间的关系:外键约束要定义在从表上,主表则必须具有主键约束或是unique约束.当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null

外键示意图:

外键创建语句:
foreign key(外键)-- 细节说明
1).外键指向的表的字段,要求是primary key或者是
unique
2).表的类型是innodb,这样的表才支持外键
3).外键字段的类型要和主键字段的类型一致(长度可以不同)
4).外键字段的值,必须在主键字段中出现过,或者为null [前
提是外键字段允许为null]
5).一旦建立主外键的关系,数据不能随意删除了.
5、chack
用于强制行数据必须满足的条件,假定在sal列上定义了check约束并要求
sal列值在1000 ~2000之间如果不再1000 ~2000之间就会提示出错。工
oracle和sql server均支持check ,但是mysql5.7目前还不支持check,
只做语法校验,但不会生效。(在mysql中实现check的功能,一般是在程序中控制,或者通过触发器完成。)

八、自增长

自增长细节:
1.一般来说自增长是和primary key配合使用的
2自增长也可以单独使用[但是需要配合一个unique]
3.自增长修饰的字段为整数型的(虽然小数也可以但是非常非常
少这样使用)
4.自增长默认从1开始,你也可以通过如下命令修改alter
table表名auto increment = XXX;
5、如果你添加数据时,给自增长字段(列)指定的有值,则以指定的值为准,如果指定了自增长,一般来说,就按照自增长的规则来添加数据
mysql表查询、多表查询(增强查询的使用)子查询、合并查询,外连接,mysql5种约束,自增长的更多相关文章
- MySQL笔记之多表
貌似很久不写博客了,趁着项目刚完结,记录一下这段时间了解到的一些认识,或许有些地方理解的还不够到位,看到的希望能不吝赐教. 外键 概念 与索引的关系 写法 查询 一对多多对一查询 多对多查询 插入 多 ...
- Mysql常用sql语句(17)- left/right join 外连接
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 外连接分为两种:left join.right ...
- mysql外连接
一,起因 在学习一个新知识之前,最好先了解一下你为何要学习这个知识,这个知识或技术能帮你做什么,可以给你带来哪些帮助.因此我先交代一下写这篇随笔的起因. 我在做项目的时候遇到了一个比较有意思的情况, ...
- mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化
先附上数据. CREATE TABLE `course` ( `cno` ) NOT NULL, `cname` ) CHARACTER SET utf8 NOT NULL, `ctime` ) NO ...
- MySQL学习笔记——多表连接和子查询
多表连接查询 # 返回的是两张表的乘积 SELECT * FROM tb_emp,tb_dept SELECT COUNT(*) FROM tb_emp,tb_dept # 标准写法,每个数据库都能这 ...
- MySQL订单分库分表多维度查询
转自:http://blog.itpub.net/29254281/viewspace-2086198/ MySQL订单分库分表多维度查询 MySQL分库分表,一般只能按照一个维度进行查询. 以订单 ...
- mysql中相关,无关子查询,表与表之间的关系以及编码和乱码的解决
※MySQL中的字符编码(注意,utf8中没有'-',跟Java中不一样)SHOW VARIABLES; //查看系统变量//查询字符编码相关的系统变量SHOW VARIABLES WHERE var ...
- MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...
- 4.mysql数据库创建,表中创建模具模板脚本,mysql_SQL99标准连接查询(恩,外部连接,全外连接,交叉连接)
mysql数据库创建,表创建模等模板脚本 -- 用root用户登录系统,运行脚本 -- 创建数据库 create database mydb61 character set utf8 ; -- ...
随机推荐
- 新来的实习生测post接口老漏测,搞清楚原理再执行真的很重要
一.GET方法和POST方法传递数据的异同 一.GET方法和POST方法传递数据的异同 http请求方法get和post是最常被用到的两个方法,get常用于向服务器请求数据,post常用于提交数据 ...
- 『无为则无心』Python函数 — 32、递归
目录 1.什么叫递归函数 2.递归的应用场景 3.递归的特点 4.应用:3以内数字累加和 5.应用:阶乘 6.总结 1.什么叫递归函数 Python中,在函数内部,可以调用其他函数.如果一个函数在内部 ...
- CSS基础 margin塌陷问题以及解决 办法
场景:两个相互嵌套的块级元素,父子元素相互紧贴margin-top会合并作用在父元素的子元素结果:导致两个盒子同时移动 解决方法: 1.给父元素设置overflow:hidden 2.给父元素设置浮动 ...
- Sentry 企业级数据安全解决方案 - Relay 项目配置
内容整理自官方文档 系列 Sentry 企业级数据安全解决方案 - Relay 入门 Sentry 企业级数据安全解决方案 - Relay 运行模式 Sentry 企业级数据安全解决方案 - Rela ...
- docker部署logstash
1.下载镜像 [root@vanje-dev01 ~]# docker pull logstash:7.0.1 2.安装部署 2.1 创建宿主映射目录 # mkdir /etc/logstash/ ...
- Jmeter创建一个http请求
1.点击'Test Plan'为测试计划命名为"创建用户接口" 2.新建一个[线程组],在[创建用户接口]处点击右键,选择[添加]-->[Threads(Users)]--& ...
- mysql按照时间分组查询
mysql 按年.月.周.日分组查询 1.按照年份分组查询 SELECT DATE_FORMAT(t.bill_time,'%Y') month_time,sum(t.pay_price) total ...
- DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ | TORCH.AUTOGRAD
torch.autograd 是PyTorch的自动微分引擎,用以推动神经网络训练.在本节,你将会对autograd如何帮助神经网络训练的概念有所理解. 背景 神经网络(NNs)是在输入数据上执行的嵌 ...
- Centos7下,Docker的安装与使用
一.Docker Install 1.卸载旧的版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ ...
- 『无为则无心』Python函数 — 35、Python中的闭包
目录 1.闭包的概念 2.实现一个闭包 3.在闭包中外函数把临时变量绑定给内函数 4.闭包中内函数修改外函数局部变量 5.注意: 6.练习: 1.闭包的概念 请大家跟我理解一下,如果在一个函数的内部定 ...