+-
Mysql语法

Mysql基础语法-SQL语句

database

1.创建数据库

create databse 数据库名;

2.查看数据库

show databses;show create database 数据库名;

3.删除数据库

drop database 数据库名;

4.修改数据库字符集

alter database 数据库名 character set utf8 collate utf8_bin;

table

1.创建表

create table 表名 
(字段1 int,字段2 varchar(20),字段3 int,字段4 int,字段5 date);

2.查看表结构

show tables;#查看该数据库下的所有表show create table 表名;#查看这个表的创建语句desc 表名;#查看这个表的结构

3.修改表结构

alter table user  add 新字段 int;#增加字段alter table user  modify 要修改类型的字段 varchar(20);#修改字段类型alter table user drop 字段;#删除字段alter table user change 旧字段名 新的字段名 varchar(20);#修改字段名称rename table 旧的表名 to 新的表名;#给表重命名

4.删除表

drop table 表名;

5.插入数据

insert into 表 values(字段1的值,字段2的值,字段3的值,字段4的值);#向表中所有字段插入值insert into 表 (字段1,字段3,字段4) values (值_1,值_3,值_4);#给表中的部分字段插入值

6.删除表中的数据

delete from 表 where 字段 = 值;#删除字段值=**的数据delete from 表;#删除表中的所有数据truncate 表;#删除表中的数据并创建一个一样的空表start transaction;#开始事务delete from 表 where 字段=值;#删除字段值为**的数据rollback;#回滚,值恢复

7.查询【select 字段1,字段2 from 表 where 条件】

select * from 表名;#查表中所有信息select 字段1,字段2,字段3 from 表;#查询部分字段select distinct 字段1,字段2,字段3  from 表;#查询相关字段,去掉重复值

7.1 查询-设置字段别名

select 字段1 as '别名',字段2 as '别名' from 表;#查询相关字段并设置别名select 字段1   '别名',字段2   '别名' from 表;#查询相关字段,并设置别名  as可以省略select 字段1+值 as '别名',字段2+值 as '别名' from 表;#查询相关值并做计算select 字段1 as "别名",字段2+字段3 as "别名" from 表;#查询相关值并做计算

7.2 条件查询 where 后的语句
【in、like、and 、or】

in --代表的范围select * from 表 where 字段 in  (值1,值2,值3);like --模糊匹配查询like "值_"   like "值%"select * from 表 where 字段 like "值%"and  orselect * from 表 where 字段1>值 and 字段2 like "值%";select * from 表 where 字段1 <值 or 字段2 <值;select 字段1 别名,字段2 as 别名 from 表 where 字段3 >值;#条件查询

7.3 查询–对结果进行排序order
【select 字段1,字段2 from 表 order by 字段 asc/desc】

select * from 表 order by 字段 asc;#对该字段进行升序排序select * from 表 order by 字段 desc;#对该字段进行降序排序select 字段1 as 别名 ,(字段2 +字段3) as 别名 from 表 order by (字段2+字段3) desc;#按该字段进行降序排序select 字段1 as 别名 ,字段2 ,字段3 from 表 order by 字段2 desc,字段3 desc;#多种排序规则select 字段1,字段2 from 表 where 字段3 like "值%" oder by 字段1 desc;

7.4 聚合函数
【求数量、求和、平均值、最大值、最小值】

count() 求数量select count(*) from 表;#统计数量select count(字段) from 表;#统计数量select count(字段) from 表   where 字段 >字段;#统计符合条件的数量select count(*) from 表 where (字段1+字段2) > 270;#统计符合条件的数量sum() 求和只对数值类型有效select sum(字段) from 表;#这个班级所有人数学成绩和select sum(字段1),sum (字段2) from 表;#分别统计字段和select sum(字段1+字段2) from 表;#统计字段和select sum(字段1)/count(*) from 表;#统计该字段平均分avg()平均select avg(字段) from 表;max()最大select max (字段) from 表;min()最小select min (字段) from 表;

7.5 分组查询
【group by 】【having 】

select * from 表 group by 字段;#按字段分组select count(*) from 表 group by 字段;select * from 表 group by 字段;select sum(字段1)  from 表 group by 字段2;select sum(字段1) from 表 group by 字段2 having 字段条件;

8.多表的查询
8.1 单表的约束(主键)

【非空、唯一、被引用】
【主键的声明 primary key】
【测试主键】create table 表(
字段1 字段类型 primary key,字段2 字段类型,
);insert into 表 values(值1,值2);【主键的**自动增长**】
自动增长只能是int,bigint类型
关键字 auto_incrementcreate table 表(
字段1 类型 primary key auto_increment,字段2 类型
);insert into 表 values(null,值1)insert into 表 values(null,值2)

8.2 多表约束(外键)

【保证表数据的完整性】create table dept(did int primary key auto_increment,dname varchar(20));create table emp(eid int primary key auto_increment,ename var char(20),sal double,dno int
 );
 insert into dept values(1,'it');
 insert into dept values(2,'hr');
 
 insert into emp values(1,'迪迦',10000,1);
 insert into emp values(2,'雷欧',19990,2);delete from dept where did=1;#可以正常删除

添加外键------映射到另外一个表的主键上并取值

create table dept(did int primary key auto_increment,dname varchar(20));create table emp(eid int primary key auto_increment,ename var char(20),sal double,dno int ,foreign key (dno) references dept (did)#添加外键
 );
 insert into dept values(1,'it');
 insert into dept values(2,'hr');
 
 insert into emp values(1,'迪迦',10000,1);
 insert into emp values(2,'雷欧',19990,2);
 
 insert into emp values(3,'雷欧',19990,3);#将会报错
 delete from dept from where did =1;#将会报错

9 . 多表设计
一对一 一对多 多对多
9.1一对多
主表(一方),从表(多方)
建表原则:在多方表中添加字段,把该字段作为外键,指向一方表的主键

9.2多对多
场景:订单表 -----商品表 用户表—角色表
建表原则:用户表和角色表举例,都需要创建一张中间表,存储数据关系

9.3 多表查询
准备实验表

MariaDB [db1]> create table dept(
    -> did int primary key auto_increment,
    -> dname varchar(22)
    -> );Query OK, 0 rows affected (0.06 sec)MariaDB [db1]> create table emp(
    -> eid int primary key auto_increment,
    -> ename varchar(22),
    -> sal double,
    -> dno int,foreign key emp(did) references dept(did)
    -> );

【笛卡尔积—两个表乘积】

语法: select * from 表1,表2;

【多表查询–内链接】
普通内链接
关键字:表1 inner join 表2 on 条件;

语法:select * from 表1 inner join 表2 on 表1.字段=表2.字段;

测试语句:select * from dept inner join emp on dept.did=emp.dno;


隐式内连接

语法:select...from 表1, 表2 where 表1.字段=表2.字段;

测试语句:select  * from dept,emp where dept.did=emp.dno;设置别名:select * from dept d,emp e where d.did=e.dno;指定字段 :select d.dname,e.ename,e.sal from dept d,emp e where d.did=e.dno;


【多表查询-外链接】
左外链接、右外链接
左外链接

语法:select * from 表1 left outer jion 表2 on 条件;    outer可省略

举例:select * from dept left join emp on dept.did=emp.dno;

右外链接

语法:select * from 表1 right outer jion 表2 on 条件;    outer可省略

举例:select * from dept right join emp on dept.did=emp.dno;


内链接与外链接的区别

举例
往emp、dept表中增加数据




9.4 子查询

select * from 表 where (sql查询语句);

一次查询的结果作为另一次查询的语句
举例,查出年龄小于平均年龄的的人员信息。

10.图形界面----navcat