数据库的理论知识点一

6 篇文章 0 订阅
2 篇文章 1 订阅

数据库

1.创建表中的字段时先写名字在写类型,类型中确定长度

desc 名字 看表结构

show create table 名字 查看检表结构

drop table 名字 删除表

增、删、改、查sql语句

增 insert into 名字 values();插入数据

查 select * from 名 看表中的数据

改 update 名 set sname=‘我’,sex=‘你’ where sno=2;修改表

删 delete from 名 where sno=1;删除数据

去掉where sno=1;就是删除所有数据

select语句的运行顺序

from–>where–>group by–>select–>having–>order by

(1)where后不能使用分组函数

(2)在分组时出现在select后的字段,必须出现在分组函数的后边

2.DDL语句:

create database 名 新建数据库

​ alter table 名 add score double(5,2)firse;或after sey

新增一列叫score数据,类型为double(5,2)一共5位取2位小数

fires:添加到第一列 after sex:添加到最后

​ alter table 名 drop score 删除score列

修改指定字段的数据类型

​ alter table 名 MODIFY score double(4,1)

对字段名进行重新命名

​ alter table 名 change score score2 double(4,1)

修改表名

​ alter table stu【修改后的名】rename to 名

3.列表约束

create table person(

主键约束

​ pid int(4) primary key auto_increment,

​ 检查约束,只能写男或女

​ psex varchar(2) default ‘男’ check (psex =‘男’ or psex=‘女’),

​ 非空约束

​ pname varchar(10) not null,

​ 唯一约束

​ pemail VARCHAR(20) unique,

​ 检查约束,年龄只能在1~150之间

​ page int(3) check(page >=1 and page <=150)

);

4.表级约束

主键约束

constraint pk_student PRIMARY key (pid),

​ 唯一约束

constraint uk_student_pemail unique (pemail),

​ 检查约束,年龄只能在1~150之间

constraint ck_student_page check (page >1 and page <=150),

​ 检查约束,只能写男或女

constraint ck_student_psex check(psex =‘男’ or psex =‘女’)

约束条件约束描述
PRIMARY KEY主键约束,约束字段的值可唯一地标识对应的记录
NOT NULL非空约束,约束字段的值不能为空
UNIQUE唯一约束,约束字段的值是唯一的
CHECK检查约束,限制某个字段的取值范围
DEFAULT默认值约束,约束字段的默认值
AUTO_INCREMENT自动增加约束,约束字段的值自动递增
FOREIGN KEY外键约束,约束表与表之间的关系

5.外键约束

constraint 约束自定义名 约束名称 字段名 references 另一张表的主键

constraint fk_student_clssno foreign key (classno) references class(cid)

级联操作

RESTRICT 严格的 当子表中含有数据 不能进行删除和更新 no action

​ delete from class where cid =2

删除外键 如果查看时没有删除 将 窗口关闭再打开

​ alter table c_student drop FOREIGN key fk_student_clssno;

constraint 约束自定义名 约束名称 字段名 references 另一张表的主键

​ alter table c_student add constraint fk_student_clssno foreign key(classno) references

​ class(cid) on delete set null on update CASCADE;

​ on delete set null on update set null 当父表数据删除 或者更新时 子表的外键的字段变为null

添加外键并且设置级联规则 级联更新

删除父表数据时 子表也会删除 更新父表数据时 子表也会更改

​ alter table student add constraint fk_student_clssno foreign key(classno) references

​ class(cid) on delete cascade on update cascade;

6.where语句:

查询指定的字段值

​ select ename,job,sal from emp;

设置别名

​ select ename ‘姓名’,job ‘工作’,sal ‘工资’ from emp;

采用算数运算符 + - * / %

​ select ename,job,sal*12 ‘年薪’ from emp;

​ select ename,job,sal+1000’薪水’from emp;

​ select ename,job,sal%600’薪水’from emp;

去重 distinct

​ select distinct job,sal from emp;

对两个字段的共同组合执行去重操作

​ select distinct job,sal from emp;

排序 默认按照 从小到大排序 desc 逆序排序

​ select * from emp order by sal asc;

当入职时间一样 按照工资从高到低排序

​ select * from emp order BY hiredate,sal desc;

排序 默认按照 从小到大排序 desc 逆序排序

​ select * from emp order by sal asc;

当入职时间一样 按照工资从高到低排序

​ select * from emp order BY hiredate,sal desc;

where 子句

比较运算符 > < >= <= !=

​ select * from emp ORDER BY sal;

​ select * from emp where sal >2000;

不等于

​ SELECT * FROM emp WHERE ename != ‘blake’;

and 并且 between a and b [a,b]

​ select * from emp where sal between 1600 and 3000;

不在此范围之内 not

​ select * from emp where sal not between 1600 and 3000;

or或者

​ select * from emp where job =‘clerk’ or job = ‘salesman’ ;

可以使用小括号改变运算

like %:

代表任意个字符 _: 代表任意一个字符

只要有一个字母是a即可

​ select * from emp where ename like ‘%a%’;

in 在什么范围之内

查找10部门或者20部门的员工信息

​ select * from emp where deptno in(10,20);

is null 判断字段是否为null

​ select * from emp where comm is null;

is not null 不是null的数据进行输出

​ select * from emp where comm is not null;

7.字符串

拼接

​ select ename,concat(ename,‘你好’,‘哈喽’)from emp;

​ SELECT concat(‘在吗’,‘不在’,‘无聊’)from dual;

mysql数据库内容的下标从1开始

​ select ename,insert(ename,1,2,‘HEELLO||’) from emp;

返回字符串内元素的个数 空格也占一个位置

​ select ename,length(’ a ') from emp;

变大写 变小写

​ select ename,lower(ename),upper(ename) from emp;

获取左/右边的n个字符

​ select ename,left(ename,2),right(ename,3) from emp;

从左边开始添加字符 直到达到指定的个数

​ select lpad(“Hello”,12,’|你|’) from dual;

当指定的长度 小于 字符串长度 则进行切割 舍掉后面的内容

​ select lpad(“Hello”,2,’|你|’) from dual

​ select ltrim(’ a ') from dual

​ select rtrim(’ a ') from dual

​ select trim(’ a ') from dual

截取字符串

​ select SUBSTRING(“hello”,2)from dual

字符串的反转

​ select reverse(“hello”)from dual

8.单多行函数

单行函数对一行数据进行处理

​ select ename,lower(ename) from emp;

多行函数

​ select count(*) from emp;

单行函数不要和多行函数一起使用 即使成功也没有意义

9.流程函数

X?Y:Z if(条件,t,f)

​ select if(1=1,‘yes’,‘no’) from dual

ifnull判断第一个是否为空,如果空输出后边的

​ select ifnull(null,20),ifnull(10,20) from dual

这用就可以把里边是空的不用计算

​ select ename,sal * 12 + ifnull(comm,0) ‘年 薪’ from emp;

用来判断是否相同 相同返回null

​ select nullif(1,2) from dual

等值校验

​ select ename ‘姓名’,deptno,case deptno when 10 then ‘财务部’

​ when 20 then ‘信息部’

​ when 30 then ‘销售部’

​ – else ‘技术部’

​ end ‘部门名称’

​ from emp;

进行范围校验

​ select ename,sal,case when sal >=5000 then “A”

​ when sal >=4000 then ‘B’

​ when sal >=3000 then ‘C’

​ when sal >=2000 then ‘D’

​ else ‘E’ end ‘薪水等级’

​ from emp order by sal desc;

10.多行函数

处理多行内容但是只返回一个结果

​ select max(sal),min(sal),avg(sal),sum(sal),count(sal) from emp;

avg sum 只能用于数值类型 max min count 适用其他数据类型

进行数据统计时 会忽略null值

用于统计记录的个数

​ select count(1) from emp;

统计去重后的数量

​ select count(distinct job) from emp;

11.分组函数

distinct去重

​ select DISTINCT deptno from emp;

统计各个部门的平均工资

​ select deptno,avg(sal) from emp GROUP BY deptno

统计各个部门的平均工资(只显示平均工资2000以上的)

having是用来执行分组后的函数的

​ select deptno,avg(sal)

​ from emp – 不可以在这用where avg(sal)>2000

​ group by deptno

​ having avg(sal) >2000

统计各个岗位的平均工资,除了MANAGER

​ select job’工作’,avg(sal)‘平均工资’

​ from emp – where job!=‘MANAGER’

​ group by job

​ having job != ‘MANAGER’

​ order by ‘平均工资’ desc;

12.数学函数

绝对值

​ select abs(-9),abs(9) from dual

​ PI3.1415926

​ select PI() from dual

ceil 向上取整 floor 向下取整

​ select ceil(3.1),floor(9.9) from dual

求n ^x 次方

​ select pow(2,3) ,power(3,3)from dual

随机数

​ select rand(),rand(),rand()

四舍五入

​ select round(5.3) from dual

​ select round(5.7) from dual

13.日期函数

​ select current_date(),current_time()

获取当前时间

​ select now(),sysdate() from dual;

​ select now(),sysdate(),sleep(5) ,now(),sysdate() from dual

14.内连接

交叉连接

​ select * from emp cross join dept;

自然连,接同名列只显示一次

​ select * from emp natural join dept;

对表进行设置别名 可以对很长的表名进行简化

​ select e.ename,e.EMPNO,job,d.DEPTNO,d.DNAME from emp e natural join dept d;

​ natural join 会 把所有的列进行查找匹配

​ using(deptno) 按照指定的列进匹配

​ select * from emp JOIN dept using(deptno)

使用on 作为连接条件

​ select * from emp e join dept d on e.deptno = d.deptno

15.sql99和sql92:

​ sql99:

​ 连接条件和筛选条件是分开的

​ sql92:

​ 连接条件和筛选条件是放到一起的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值