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