0%

SQL基础

SQL基础

1.sql分类

  • DDL:定义不同的数据段,数据库,表,列,索引等。常用关键字create、drop、alter等
  • DML:用于增删改查,检查数据完整性。常用关键字insert、delete、update、select
  • DCL:控制许可和访问级别。定义数据库、表、字段、用户的访问级别和安全级别。常用关键字grant、revoke。

DDL语句

首先登录数据库

1
cmd 

mysql默认下载在c盘,找到对应的bin目录下

mysql -u root -p

提示输入密码

1
2
3
4
5
6
7
8
9
10
11
-- 创建数据库
create database mytest;
-- 显示所有的数据库
show databases;
-- 进入数据库
use mytest;
-- 显示所有的数据表
show tables;
-- 删除数据库
drop database mytest;
-- Query OK, 0 rows affected (0.02 sec) 删除成功

创建表

1
2
3
4
5
6
-- 创建一个名称为 emp 的表。表中包括 3 个字段,ename(姓名),hiredate(雇用日期)、sal(薪水),字段类型分别为 varchar(10)、date、int
create table emp(ename varchar(10),hiredate date,sal decimal(10,2),deptno int);
-- 查看表结构
desc emp;
-- 更加全面的表结构信息,可以看到存储引擎和字符集
show create table emp \G

修改表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 将ename的长度修改为255
alter table emp modify ename varchar(255);
-- 新增字段
alter table emp add column age int;
-- 删除字段
alter table emp drop column age;
-- 改字段名
alter table emp change age angle int;
-- change 和 modify 都可以修改表的定义,不同的是 change 后面需要写两次列名,不方便。但是 change 的优点是可以修改列名称,modify 则不能。
-- 修改字段排列顺序
alter table emp add birth date after ename;
-- 修改字段 age,将它放在最前面
alter table emp modify age int first;
-- 修改表名
alter table emp rename emp1;

删除表

1
drop table emp1;

DML语句

添加数据

1
2
3
4
5
-- 添加1条
insert into emp(ename,age,sex) values("李四",18,"女");
-- 添加多条
insert into emp(ename,age,sex) values("张三",16,"男"),("王五",12,"男");

更新数据

1
2
3
4
-- 将姓名为李四的年龄修改为18
update emp set age=20 where ename="李四";
-- 修改emp表种张三的年龄和tt表中的性别
update emp e,tt t set e.age=e.age*t.age ,t.sex=e.sex where e.ename=t.ename;

删除数据

1
2
3
4
-- 删除王五
delete from emp where ename="王五";
-- 删除多表数据
delete e,t from emp e,tt t where e.age=t.age and e.ename="李四";

查询语句

1
2
3
4
5
6
7
8
9
10
11
12
-- 查询全部
select * from emp;
-- 查询部分字段
select ename,age from emp;
-- 查询不重复
select distinct ename from emp;
-- 查询年龄大于20和性别等于男的信息
select * from emp where age>20 and sex="男";
-- 按照年龄升序
select * from emp order by age;
-- 根据年龄排序,从第二条记录开始,显示前三个
select * from emp order by age limit 1,3;

聚合

1
2
3
4
5
6
7
8
9
10
-- 查询总数
select count(*) from emp;
-- 根据姓名分组,查询个数
select ename,count(*) from emp group by ename;
-- 根据姓名分组,查询个数以及总数
select ename,count(*) from emp group by ename with rollup;
-- 查询名字数量大于1的名字和个数
select ename,count(*) from emp group by ename having count(*)>1;
-- 查询平均年龄,最大年龄,最小年龄
select avg(age),max(age),min(age) from emp;

表连接

1
--