mysql(约束,截取,虚表,截取,字符串连接,别名,模糊查询,子查询,排序,分组)

1. 约束

	主键约束:
	primary key  非空且唯一
	(1).一个表中最多只能有一个主键
	(2).多个字段可以联合起来共同做主键(复合主键)
	(3).主要使用于id字段

	非空约束:
	not null  非空
	(1)>必填的字段

	默认约束:
	default 有默认值

	唯一约束:
	unique key 唯一
	(1).不能重复存在的内容

	自增长约束
	auto_increment 会自动增长
	(1).通常和主键绑定,设置自增
	(2).自增的值我们可以设置,但不建议;  默认自增是1

	外健约束
	foreign key  用于多张表
	(1).建立外健的表之间数据是相互关联的约束的
	(2).InnDB才支持外健设置(数据库的存储引擎)
	存储引擎:
	- InnoDB
	- MyISAM

2.null:null和所有数据相加,结果还是null

	ifnull(参数1,参数2):判断参数1字段是否为null,
		如果为null,则取参数2的值

3.length,substr,trim

	lenggth(字段名):获取指定的字段值得长度

image


	substr(字段名,截取的下标,截取的长度):截取字段(mysql数据库中的截取下标从1开始)

image


	trim():去除两边的空格
	ltrim():去除字段左边的空格
	rtrim():去除字段右边的空格

image


	dual虚表:不是一个真实存在的表,通常是用来补全语法的
	因为查询语句必须接from表名,但是没表名的时候,就可以用dual

4.round,truncate,mod,ceil,floor

	round(字段名,保留的小数位):四舍五入

	truncate():截取

	mod(字段1,字段2):取余   字段1除字段2的余数

	ceil(字段):向上取整,取字段的值要大的最小整数

	floor(字段):向下取整,取比字段的值要小的最大整数

image

5.自增长约束,外健约束

  • 自增长约束:
1.可以设置步长
	 set @@auto_increment_increment=2; 设置步长
2.可以设置自增长从指定的数字开始
	创建user表,主键从100开始自增
	create table user(
	id int(4) primary key auto_increment,
	name varchar(12),
	age int(4)
	)auto_increment=100

8.外键约束:可以设置两个表以上

foreign key

  • 有外键的表示从表,做关联有主键/唯一约束的字段表叫主表
  • 主表中对应的字段数据(必须是设置了主键/唯一约束),保证主表中该字段的值是唯一的,此时在从表中做外键的字段的值必须是主表中有的,否则不能添加
    注意:如果想要删除,可以先删从表中对应的数据,让主表该字段的值没有对应了,则可以删除主表字段值.

创建外键的方式:

	在建表的时候创建
	create table student(
	gId int(4),
	sname varchar(12),
	constraint fk_gid foreign key (gId) 			references grade(gradeId)
	)

在创建表之后,插入数据之前创建外键(使用alter)

	alter table student add
	constraint fk_gid foreign key (gId) references grade(gradeId)

删除外健

	删外健:alter table 表名 drop foreign key 外建名
	删索引:alter table 表名 drop index 外健名
注意:删除外健的同时还需要将对应的索引删除(索引和外健名一样)

9.concat():字符串连接

image

10.笛卡尔积:

-笛卡尔积:多个表关联的时候,数据两两相连,会导致表中数据翻倍,在做多表联查的时候,一定要避免笛卡尔积

    • select * from 表1,表2 where 表1.关联字段=表2.关联字段
      注意:在做多表联查的时候,一定要添加where条件,找到几个表之间的关联关系

11.别名

  • 别名:当表做关联的时候,如果表名或者字段名过长,又或者为了数据的安全,不想让别人看见数据库表中真实的字段,我们可以选择给查询出来的字段起个别名

	select e.ename as 姓名,e.deptno as 部门编号,d.dname as 部门名称 FROM dept as d,emp as e 			where e.deptno=d.deptno
注意:as关键字可省略
	select e.ename 姓名,e.deptno 部门编号,d.dname 部门名称 FROM dept d,emp e where e.deptno=d.deptno

12.模糊查询

关键字:like
 %:表示任意字符
 _:表示单个字符
例如

image

13.in( )

in( ):在...里面 和or相似

例如

image

14.between...and -> ..在..之间 和and类型

	between  A and B 
注意:会包含 A 和 B 的值

例如

image

15.any(任意的),all(所有的)

注意:这两个并不能单独使用,必须搭配>,<一起使用
	>all:大于结果集中最小的即可
	<all:小于结果集中最大的即可
	>any:大于结果集中最大的
	<any:小于结果集中最小的

16.子查询

  • 查询中还有子查询
    image

17.distinct ->去重

去除表中重复的数据

例如

image


18.order by ->排序

  • desc:降序
  • asc :升序(默认升序)
例如

image

19.聚合函数/多行函数/分组函数:

max( ):最大值
min( ):最小值
avg( ):平均值
sum( ):求和
count( ):统计个数

例如

image

20.group by ->分组

例如

image

	将查询出来的结果集按照某个字段值相同的分为一组,通常和聚合函数连用
 注意:group by 后面出现的字段可以出现在select后面,
      但是如果group by后面没有出现的字段出现在select后面,则有可能导致查询的结果不正确
			    
	当聚合函数出现过滤条件中时,并且有 gruop by 的情况下
	我们不能使用where
				
	having:当gruop by 后面需要使用聚合函数过滤条件是,使用having
posted @ 2022-10-22 21:43  梦梦想睡觉  阅读(130)  评论(0编辑  收藏  举报