SQL基本语法知识(mysql)

xiaoxiao2021-02-28  61

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;

 

 

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-29303.html

最新回复(0)