SQL基础语句的使用
SQL语句主要分3类,DDL、DML和DCL。
- DDL为数据定义语句,定义看不同的数据段、数据库、表、列、索引等数据库对象的定义。
- DML为数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。
- DCL为数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。
一. DDL语句(数据定义语言)
创建数据库
create database dbname;(数据库名称)
查看数据库
show databases;
选择使用数据库
use dbname;
删除数据库
drop database dbname;
查看数据库表
show tables;
创建表
MySQL的表名是以目录的形式存在于磁盘上的,表名的字符可以用任意目录名允许的字符。
create table tablename(column_name column_type constraints```)
查看表的定义
desc tablename;
show create table tablename \G;
// 查看表的创建语句,信息更全面。可看到表的存储引擎engine和字符集charset等。
// “\G”是使记录能够按照字段竖着排列。
删除表
drop table tablename;
修改表
//修改表类型
alter table modify ename varchar(20);
//增加字段
alter table tablename add column age int(3);
//删除字段
alter table tablename drop column age;
//修改字段
alter table tablename change age age1 int(4);
(//change 和 modify 均可修改表的定义,但change的优点是可以修改列名称,modify不能。)
//修改字段排序顺序
alter table tablename add birth date after ename;
alter table tablename modify age int(3) first;
//更改表名
alter table tablename rename tablename1;
二、DML语句(数据操纵语言)
插入
//指定字段插入
insert into tablename (name, age) values ('zz', 21);
//顺序插入
insert into tablename values ('zz', 21, 2);
//多值插入
insert into tablename values ('aa', 22, 3),
('bb', 32, 4);
更新
//单表更新
update tablename set age=42 where name='aa';
//多表更新
update tablename a, tablename1 b set a.name='aa',b.name='bb' where a.age=b.age;
删除
//单表删除
delete from tablename where name='aa';
//多表删除
delete a,b from tablename1 a, tablename2 b where a.age=b.age and a.age=21;
查询
//不重复查询
select distinct age from tablename;
//条件查询
select * from tablename where name='aa';
//排序和限制查询
select * from tablename order by deptno desc;
(//desc为降序排序,asc为升序排序,默认是升序排序。)
select * from tablename order by deptno limit 3;
(//显示排序后前三条记录。limit 属于MySQL扩展SQL92后的语法,在其他数据库不适用)
select * from tablename order by deptno limit 1,3;
(//从第二条记录开始,显示三条记录。)
//聚合
select [field1,field2,```fieldn] fun_name
from tablename
[where contition]
[group by field1,field2,```fieldn [with rollup]]
[having contition]
(/*fun_name表示聚合操作,sum、count、max、min等;
having与where的区别是,where是聚合前对记录进行过滤,而having是对聚合后记录进行过滤。*/)
//表连接
//内连接
select * from table1,table2 where table1.age=table2.age;
(//内连接仅选出两张表中互相匹配的记录)
//外连接
select * from table1 left join table2 on table1.age=table2.age;
(/*外连接包含左连接和右连接;
左连接查询结果包含左表中与右表不匹配的记录;
右连接查询结果包含右表中与左表不匹配的记录。*/)
//子查询(in、not in、=、!=、exists、not exists)
select * from table1 where age in(select age from table2);
(//若查询记录数有唯一性,可用 = 代替in)
//记录联合(union、union all)
select * from table1 union all select * from table2;
(//union会去掉重复的记录;)
三、DCL语句(数据控制语言)
授权与收回
//授权
grant select, insert on dbname.* to 'username' @ 'localhost' identified by '123';
//dbname.*指该数据库中的所有表
//收回
revoke insert on dbname.* from 'username' @ 'localhost';