SQL数据库基础语句
SQL语言
1.创建数据库:
单行注释 :##
多行注释:/*
*/
2.创建数据库表:
create table t_student(
sno int(6) not null,
sname varchar(5),
sex char(1),
age int(3),
enterdate date,
classname varchar(10),
email varchar(15)
);
3.查看表的结构:展示表的字段的详细信息
desc t_student;
4.查看表中的数据:
select * from t_student;
5.查看建表语句:
show create table t_student;
6.在t_student数据库表中插入数据
inster into t_student values (001,'丽丽','女',19,'2019-6-9','软件二班','1233@com');
inster into t_student values (002,'美美','女',19,'2019-6-10','软件一班','4555@com');
inster into t_student values (003,'天天','男',19,'2019-6-9','软件二班','1333@com');
inster into t_student values (004,'飞飞','男',19,'2019-7-9','计科二班','1255@com');
inster into t_student values (005,'彩彩','女',19,now(),'软件一班','8990@com');
inster into t_student (sno,sanme,email) values (006,'莎莎','9990@com');
7.修改表中数据:
update t_student set sex = '女';
update t_student set sex = '女' where sno = 004;
8.删除表中数据:
delete from t_student;
delete from t_student where sno = 001;
9.修改表的结构--->增加一列:
alter table t_student add score double(5,2);
-- (----->5:总位数 2:小数位)
-- 放在最前面:
alter table t_student add score double(5,2) first;
-- 放在sex列的后面:
alter table t_student add score double(5,2) after sex;
10.修改表的结构--->删除一列:
alter table t_student drop score;
11.修改表的结构--->修改一列:
alter table t_student modify score float(4,1);
-- modify修改的是列的类型的定义,但是不会改变列的名字
alter table t_student change score score1 double(5,1); -- change修改列名和列的类型的定义
12.删除表:
drop table t_student;
13.完整性约束:
14.外键约束:
15.DDL和DML补充:
16.算数运算符:
17.去重操作:
18.排序:
19.where查询:
20.函数举例:
除了多行函数(max,min,count,sum,avg),都是单行函数
函数的分类
lower(ename),upper(ename);改变每一条结果,每一条数据对应一条结果 --单行函数
max(sal),min(sal),count(sal),sum(sal),avg(sal);多条数据,最终展示一个结果 --多行函数
其他函数:查看数据库信息
select database(),user(),version() from dual;
21.group by 分组
22.多表查询:
---自然连接:natural join
---优点:自动匹配所有的同名列,同名列只展示一次,简单
select *
from emp
natural join dept;
select empno,ename,sal,dname,loc
from emp
natural join dept;
-- 缺点:查询字段的时候,没有指定字段所属的数据库表,效率低
-- 解决:指定表名
select emp.empno,emp.ename,emp.sal,dept.dname,dept.loc ,emp.deptno
from emp
natural join dept;
-- 缺点:表明太长
-- 解决:表起别名
select e.empno,e.ename,e.sal,d.dname,d.loc ,d.deptno
from emp e
natural join dept d;
-- 自然连接natural join缺点:自动匹配表中所有的同名列,但是有时候我们希望只匹配部分同名列:
-- 解决:内连接 -- using字句:
select *
from emp e
inner join dept d
using(deptno) -- 这里不能写natural join了,这里是内连接
-- using 缺点:关联的字段,必须是同名的
-- 解决:内连接 - on子句:
select *
from emp e
inner join dept d
on (e.deptno = d.deptno);
多表连接查询的类型:
1.交叉连接 cross join
2.自然连接 natural join
3.内连接 using子句
4.内连接 on子句
-- 外连接:除了显示匹配的数据以外,还可以显示不匹配的数据
-- 左外连接 left outer join --左面的那个表的信息,即使不匹配也可以看出效果
select *
from emp e
left outer join dept d
on e.deptno = d.deptno;
-- 右外连接 right outer join -- 右面的那个表地信息,即使不匹配地也可以查看出效果
select *
from emp e
right outer join dept d
on e.deptno = d.deptno;
-- 全外连接 full outer join --这个语法在mysql中不支持,在oracle中支持 展示左,右表全部不匹配的数据
-- scott , 40号部门都可以看见
select *
from emp e
full outer join dept d
on e.deptno = d.deptno;
--解决mysql中不支持连接的问题:
select *
from emp e
left outer join dept d
on e.deptno = d.deptno
union -- 并集 去重 效率低
select *
from emp e
right outer join dept d
on e.deptno = d.deptno;
-- MySQL 中对集合操作支持比较弱,只支持并集操作,交集,差集不支持(oracle中支持)
多表查询(三张表)
select e.name,e.sal,e.empno,e.deptno,d.dname,s.*
from emp e
right outer join dept d
on e,deptno = d.deptno
inner join salgrade s
on e.sal between s.losal and s.hisal
23.子查询:
24.多行子查询:
25.相关子查询:
26.事务:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南