mysql数据库语言02

运算符

算术运算符

+ - * / %...
	select 1+1;
	select 1-1;
	select 1*1;
	select 5/2; #保留小数
	select 5 div 2; #取整
	select 5/0; #null
	select 5%2;

比较运算符

> < >= <= = !=
	select 1=2;
	select 1!=2;
	select 1>2;
	select 1<2;
	select 1<>2;

逻辑运算符

and or !
	select 1>2 and 1<2;
	select 1>2 or 1<2;
	select !(1>2);

位运算符

& | ^
	select 4&3;
	select 4|3;
	select 4^3;

DML

insert

语法格式:insert into tname[(fie1,fie2...)] values(val1,val2....);
	#插入一条完整记录
	  insert into stu values('[email protected]','zs',18,'男','13678765435');
	#插入记录: ls 20 女
	  insert into stu(age,sname,sex) values(20,'ls','女');
	#插入三条记录(批量插入)
	  insert into stu(age,sname,sex) values(23,'ww','男'),(34,'zl','男'),(24,'haha','女');
	#复制一张表 stu --> student
		#1.创建student,结构类似(结构复制)
		#2.查询stu表插入到student表中
		#复制表结构
			create table student select * from stu where 1=0;
		#查询并且插入数据
			insert into student select * from stu;
		#复制表结构及其数据
			create table stu1 select * from stu;

update

语法结构: update tname set fie1=val1,fie2=val2...[where condition]
	(where后的条件字段必须唯一确定该条记录: 主键)
	update stu set age=28 where sname='zs';

delete

语法结构: delete from tname [where condition]
	delete from stu where sname='haha';

数据完整性

1.什么是数据完整性?

​ 数据的准确性和可靠性。

2.完整性约束:设计时应该添加约束保证数据的准确

​ 实体完整性

​ 实体:就是记录

​ 保证记录是准确的,不重复的。

​ 主键约束: primary key(唯一并且不能为空)

​ 主键选择: 能够唯一,挑选非业务字段(无意义字段)

​ 一张表只能有一个主键;主键可以是多个字段(联合主键)

​ 语法:

​ 创建表时添加约束

添加:
create table student(
	sid int primary key,
	sname varchar(20),
	age int
);
添加2(更适合添加联合主键)
create table stu1(
	sid int,
	sname varchar(20),
	age int,
	primary key(sid)
);
修改表约束
	alter table student add constraint PK_SID primary key(sid);
删除主键约束
	alter table student drop primary key

​ 唯一约束:unique(唯一)

​ 语法:

创建表并添加约束:
create table student(
	sid int primary key,
	sname varchar(20),
	age int,
	card varchar(18) unique
);

​ 修改表约束

​ alter table stu add constraint UQ_CARD unique(card);

​ 主键自增:auto_increment(从1开始,每次增长1)

语法:
create table stu(
	sid int primary key auto_increment,
	sname varchar(20),
	age int
);
注意:
	自增不会由于删除而重置
	delete和truncate的区别:
		1.delete和truncate都是删除表中的数据,不影响表结构
		2.delete不会重置自增,truncate重置自增
		3.delete逐行删除,效率低于truncate

​ 域完整性

​ 域:字段

​ 保证字段的值准确的

​ 约束

​ 类型约束:数据类型

​ 非空约束: not null

​ 默认值: default

create table student(
	sid int primary key auto_increment,
	sname varchar(20) not null,
	sex varchar(3) default '男'
);

​ 引用完整性

​ 表之间数据参考准确性。

​ 约束:

​ 外键约束: foreign key

alter table student add constraint FK_CID foreign key(cid) REFERENCES classroom(cid);
说明:
	外键取值范围必须在参照表主键范围内
	主外键的名称可以不一致,但是约束必须一致。

DQL

基本语法格式

select 查询字段(表达式)

from 表(视图,结果集...)

where 条件

group by 分组

having 检索

order by 排序

limit 限制结果

常见查询

#1.查询emp表中所有的员工信息
	select * from emp;
#2.在emp中查询所有员工的姓名和职位信息。
	select ename,job from emp;
#3.在emp表中查询所有的20号部门的员工信息。
	select * from emp where deptno=20;
#4.在emp中查询工资>2000的员工的姓名和工资。
	select ename,sal from emp where sal > 2000;
#5.在emp表中查询工资在1000到2000之间的员工信息。(范围查询)
	select * from emp where sal >=1000 and sal <=2000;
	select * from emp where sal between 1000 and 2000;
#6.在emp表中查询员工编号为7788,7369,7521的员工信息。(集合查询)
	select * from emp where empno = 7788 or empno=7521 or empno=7369;
	select * from emp where empno in (7788,7521,7369);
#7.在emp表中查询所有的职位信息(去重)
	select distinct job from emp;
#8.在emp中查询工资提升5%后的员工姓名及其工资。(别名:字段,表达式,表,结果集等)
	# [as] 别名
		select ename,sal*1.05 nsal from emp;
		select e.ename,e.sal from emp e;
#9.在emp表中查询所有没有奖金的员工信息。(comm值为null)
	select * from emp where comm is not null;
#10.在emp中查询工资最高的员工信息。
	#1.倒序排序取第一个
	#排序:order by 排序的字段(默认升序,asc|desc)
	#工资一样按照编号降序排序
		select * from emp order by sal desc,empno desc;
	#2.限制结果查询(limit 开始索引,长度,仅适用于mysql)
		select * from emp limit 0,5;
		select * from emp order by sal desc limit 1;
#11.查询名称中包含s的员工信息。(模糊查询:like %:代表0到多个字符     _代表1位字符)
	select * from emp where ename like '%s%';
	select * from emp where ename like 's%';
	select * from emp where ename like '%s';
#查询名称第三个字符为L的员工信息
	select * from emp where ename like '__L%';

函数

单行函数

结果返回一条记录

分类
#数学函数
	select PI();
	select CEIL(-12.3); #向上取整
	select FLOOR(-12.3); #向下取整
	select ROUND(12.54,-1); #四舍五入
	select abs(-10);  #取绝对值
	select RAND();  #随机数
	select POW(2,3); #幂运算
	select SQRT(25); #开方
#字符串函数
	select LOWER(ename) from emp;
	select LOWER('THIS IS');
	select UPPER('this is');
	select CONCAT('e-',ename) from emp;
	select SUBSTR('abcdef',1,3);
	select REPLACE('abcdef','cd','aa');
	select TRIM('    a   a  ');
	select LENGTH('aa');
	select LPAD('abc',10,'*');
	select RPAD('abc',10,'*');
#日期函数(获取时间日期,日期时间计算)
	select NOW();
	select SYSDATE();
	select CURRENT_TIMESTAMP();
	select CURRENT_TIME();
	select CURRENT_DATE();
	select YEAR(NOW());
	select MONTH(date);
	select DAY(date);
#日期计算
	select DATE_ADD(NOW(),interval 2 MONTH);
	select LAST_DAY(NOW());

聚合函数

count():统计数目
sum():求和
max()
min()
avg()
select count(*) from emp;
select count(1) from emp;
select count(comm) from emp;#统计非空字段数目

分组函数

group by 分组条件
	#求平均工资大于2000的部门编号和平均工资
	select deptno,avg(sal) nsal from emp group by deptno having nsal > 2000;
	#having和where区别
		1.顺序不同:having在group 之后编译
		2.having中可以使用聚合函数

加密函数

实现数据加密
	select MD5('root');
	select SHA('root');
	select PASSWORD('root');

你可能感兴趣的:(mysql)