数据库
首页 > 数据库> > mysql表查询、多表查询(增强查询的使用)子查询、合并查询,外连接,mysql5种约束,自增长

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、如果你添加数据时,给自增长字段(列)指定的有值,则以指定的值为准,如果指定了自增长,一般来说,就按照自增长的规则来添加数据

标签:tmp,多表,mysql5,外键,查询,key,my,主键
来源: https://www.cnblogs.com/herebug/p/15120872.html