SQL分类:
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
DCL(Data Control Language): 数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language): 数据查询语言,用来查询记录(数据);
注意:sql语句以;结尾
DDL:关键字:CREATE 、ALTER、DROP
1.对数据库操作:
创建
create database mydb;创建数据库
create database mydb character set utf8; 创建数据库并设置编码为utf-8;
create database mydb character set gbk collate gbk_chinese_ci 创建数据库,并设置编码为gbk,增加校验
删除
drop database mydb; 删除数据库
修改
alter database mydb character set utf8; 修改数据库编码为utf-8;
查询
show databases; 查看所有数据库
show create database mydb; 查看创建mydb数据库的定义信息
other:
sselect database(); 查看当前使用数据库
use mydb; 使用mydb数据库
2. 对数据表操作:
create table myemp(id int,name varchar(50));创建数据库表
show tables; 当前数据库中的所有表
desc myemp; 查看表的字段信息
alter table myemp add image blob; 在表中增加一个image列,数据类型是blob:字节
alter table myemp modify job varchar(60); 修改job列的数据类型为varchar(60) ;
alter table myemp change name username varchar(100); 修改列名name为username,必须带数据类型;
alter table myemp drop image; 删除image列,一次只能删除一列;
alter table myemp character set utf8; 修改表的字符集为utf-8;
rename table myemp to youremp; 修改表名;
show create table myemp; 查看表格的创建细节
drop table myemp; 删除表;
DML操作: 对表中的数据进行增删改操作;
关键字 insert 、 update、 delete
insert into myemp(...) values(...);
update myemp set username = 'adb' where id=2;
delete from myemp where ....
在mysql中,字符串类型和日期类型都要用单引号括起来。
小知识:查看数据库编码具体信息: show variables like 'character%';
临时更改客户端和服务器结果集的编码
set character_set_client=gbk;
set character_set_results=gbk;
delete from myemp; 删除表中记录,表结构还在,删除后数据可以找回(日志会记录)
truncate table myemp; 删除是把表直接droop掉,然后在创建一个同样的新表。删除的数据不能找回,执行速度比delete快。
DQL操作 : 数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
模糊查询 like 通配符: _任意一个字母 % 任意0-n个字母。
select distinct sal from emp; 去除sal重复的记录。
select distinct sal,comm from emp; 去除sal和comm都重复的记录。
asc 升序 默认的 desc降序
select * from emp order by sal desc, empno asc; 按月薪降序排列,月薪相同时,按编号升序排列。
count : 统计指定列不为null的记录行数;
sum(), avg() 如果指定列类型不是数值类型,计算结果为0;
select count(comm),count(mgr) from emp; 查询有佣金的人数,查询有领导的人数
ifnull(..,0) 为空的话置为0;
select sum(sal+ifnull(comm,0)) from emp; 查询所有雇员月薪和佣金和;
注意: having和where 的区别:
1.having是在分组后对数据进行过滤
where 是在分组前对数据进行过滤
2.having后面可以使用分组函数(统计函数)
where 后面不可用使用分组函数
where 是对分组前记录的条件,如果某行记录没有满足where字句的条件,那么这行记录不会参加分组,而having是对分组后数据的约束。
limit : 用来限定查询结果的起始行,以及总行数。
select * from emp limit 0,5; 查询5行记录。 注意: 起始行从0开始,即第一行;
重点: 查询语句书写顺序: select - from - where - group by -- having -- ordre by -- limit;
查询语句执行顺序: from - where -- group by -- having -- select -- order by -- lilmit;
约束与多表::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::