SQL基本语法知识(mysql)

SQL:结构化查询语句,一门独立于数据库的操作指令,在不同数据库管理系统中存在细微差异
SQL分类:
1、DDL数据定义语句(create,drop,alter....)
2、DML数据操作语句(insert,update,delete,select)
3、DCL数据控制语句(grant,revoke)
limit :限制个数(不要用函数代替参数)(limit 0,5)
group by :分组
as :命名
desc :降序
asc  :升序
order by :排序
having :一般结合group by,相当于where
distinct: 去重,放在select后面
where>group by>order by>limit
MySQL数据类型
字符串
char定长字符串类型,一般存长度固定字符串,剩余长度会被null填充,如身份证,性别,手机号
varchar可变长度的字符串类型,最长11位
nchar 长度以字符为单位,长度固定
nvarchar 长度以字符为单位,长度变长
 数值
int/integer
float
double decimal
日期类型
date(日期格式 yyyy-MM-dd)
time(时间格式HH:mm:ss)
datetime(yyyy-MM-dd HH:mm:ss)
year(年份格式yyyy)
timestamp(加:yyyyMMddHHmmss  取:yyyy-MM-dd HH:mm:ss)
timestamp(可以加默认值current_timestamp)
大文本
text
二进制类型
blob
binary

======================创建修改表====================
1,创建数据库实例
create database oa;
2,使用数据库实例
use oa;
3,创建数据表(员工表:工号,姓名,性别,职位,月薪)
create table emp(
eno int,
ename varchar(32),
sex char(8),
job varchar(16),
sal float);
4,删除列(没有数据)
alter table emp drop sex;
5,向表中新增一个列
alter table emp add dept varchar(16);
6,修改类型(没有数据)
alter table emp modify sal double;
7,删除表
drop table emp;
8,修改表中的列名称
alter table emp change deptno to dno int;
9,修改表名称
alter table emp rename to employee;
====================创建两个表================
create table  employee(
eno int,
ename varchar(32),
job varchar(32),
phone varchar(32),
sal float,
dno int
);

create table detp(
dno int,
dname varchar(32),
dphone varchar(32)
);
===================增删改查===================
10,插入数据
insert into emp values(1,'唐僧','部门经理','15072456789',18800.08,10);
insert into emp(eno,ename,sal) values(2,'孙悟空',8000.00);
insert into emp(eno ,ename)values(3,'猪八戒'),(4,'沙和尚'),(5,'白龙马');
insert into emp select *from emp;
11,删除数据
delete from emp where eno>4;
12,修改数据
update emp set job='普通员工' where job is null;
======================补充约束===================
13,主键约束
alter table emp add constraint pk_eno primary key(eno);
14,不为空约束(修改列类型不为空)
alter table emp change ename ename varchar(32) not null;
15,设置默认值
alter table emp change ename ename varchar(32) not null default '匿名';
16,唯一约束
alter table department change dname dname varchar(32)not null unique;
17,检查约束(mysql不支持)
alter table employee add constraint ck_sex check(sex in('男','女'));
creata table tb(sex enum('男','女'));(mysql 支持)
18,外键约束(需要为主键)
alter table employee add constraint fk_dno foreign key(dno) references department(dno);
=======================建表时约束===================
1、
create table dept
(
dno int primary key auto_increment,          //或者dno int auto_increamt,
dname varchar(32) not null unique ,
tel varchar(16) not null unique
);

create table emp(
eno int primary key auto_increment,
ename varchar(32) not null,
job varchar(32) not null default '普通员工',
phone varchar(11) check(len(phone)=11),
sal float,
dno int references dept(dno)
);

=======================单表查询======================
#显示所有员工信息
select * from empt;
#查询所有普通员工
select * from emp where job ='普通员工';
select eno,ename,job.phone,sal,dno from emp;
#查询所有普通员工的姓名和月薪
select ename,sal from emp where job = '普通员工';
#查询所有名字包含“悟空”的信息;
select * from emp where ename like '%悟空%';
#查询名字以“空”结尾的信息
select * from emp where ename like '%空';
#查询名字第二个字为“悟”,名字三个字的信息
select * from emp where ename like '_悟_';
#计算每个部门员工总数,部门平均薪资,以及部门号中人数最多的一项.(从第0个位置,找一位)
select count(*),avg(sal),dno from emp group by dno order by count(*) desc limit 0,1;

====================聚合函数===========================
count
sum
avg
min
max
#获取总员工个数
select count(*) from emp;
#获取总员工个数,命名为total
select count(*) total from emp;
select count(*) as total from emp;
#查询工资总和
select sum(sal) from emp;
#查询1号工资总和
select sum(sal) from emp where dno=1;
#查询各个部门总工资,按部门号排序
select sum(sal),dno from emp group by dno;
#查询各个部门的员工总数,部门平均薪资,以及部门号
select count(*) ,avg(sal),dno from emp group by dno;
#模糊查询
SELECT e.*
from
employee e,
(select num,CONCAT(name,addr,zip) words FROM employee) t
WHERE t.words LIKE '%王%' and t.num=e.num;

====================多表查询============================
#left jion......on 左连接,参考左边表
#right jion.....on右连接,参考右边表
#inner jion....on 内连接(相当于等值连接)
#left outer jion.....on左外连接
#right outer jion....on右外连接
select e.*,d.* from employee e right jion department d on e.depno = d.depno
#查询与李华在同一个部门的所有员工
select * from employee WHERE Depno=(
SELECT Depno from employee WHERE `Name` ='李华'
);
#查询与李华或者王芳在同一个部门的所有员工
SELECT * FROM employee WHERE Depno in (SELECT Depno from employee where name in ('王芳','李华'));
#查询与李华在同一个部门和同一个地址的员工
select * from employee where
Depno =(select Depno from employee WHERE `Name`='李华')
AND
Addr =(select Addr from employee WHERE `Name`='李华');
#或者  (子查询) 
select t1.* from employee t1,
(select depno ,addr from employee where name = '李华') t2
WHERE t1.depno = t2.depno and t1.Addr = t2.addr;

#显示所有员工的员工信息及,部门信息,以及收入支出( 等值连接
SELECT e.* ,d.depname, d.remark ,s.income ,s.outcome
FROM
employee e,department d ,salary s
where  e.num=s.num and d.Depno=e.Depno
 ORDER BY e.num;






猜你喜欢

转载自blog.csdn.net/qq_24065713/article/details/76726534
今日推荐