SQL使用入门

SQL使用入门

当面对一个陌生的数据库时,通常需要一种方式与它进行交互,以完成用户所需要的各种工作,这种时候,就要用到SQL语言了。SQL是Structure Query Language(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言。
SQL语句主要可以划分为以下3种类别:
1)DDL(Data Definition Languages):数据定义语言
2)DML(Data Manipulation Language):数据操纵语句
3)DCL(Data Control Language):数据控制语句

DDL语句:

DDL是数据定义语言的缩写,简单来说,就是对数据库内部的对象进行创建、删除、修改等操作的语言。它和DML语句的最大区别是DML只是对表内数据操作,而不涉及表的定义、结构的修改,更不会涉及其它对象。DDL语句更多地由数据库管理员(DBA)使用,开发人员一般很少使用。
1)创建数据库
连接服务器:mysql -uroot -p
Mysql代表客户端命令,“-u”后面跟着连接的数据库用户,“-p”表示需要输入密码
创建数据库:create database dbname
EG:create database test1;
查看test1数据库中创建的所有数据表:show tables;
2)删除数据库
drop database dbname;
3)创建表
create table tablename(column_name_1 column_type_1_constraints,……);
查看表的定义:desc tablename
如果要得到更全面的表定义信息:show create table tablename \G;
“\G”选项的含义是使得记录能够按照字段竖向排列,以便更好地显示内容较长的记录
4)删除表
drop table tablename;
5)修改表
修改表的类型:
alter table tablename modify [COLUMN] column_definition [FIRST|AFTER col_name]
EG:alter table emp modify ename varchar(20);
6)增加表字段:
alter table tablename add [COLUMN] column_definition [FIRST|AFTER col_name]
EG:alter table emp add column age int(3);
7)删除表字段:alter table tablename drop [COLUMN] col_name
EG:alter table emp drop column age;
8)字段改名:
alter table tablename change old_name column_definition [FIRST|AFTER col_name]
EG:alter table emp change age age1 int(4);
注意:change和modify都可以用来修改表的定义,不同的是change后面需要写两次列名,不方便,但是change的优点是可以修改列名称,而modify则不能。
9)修改字段排列顺序:
EG:alter table emp add birth date after ename;
alter table emp modify age int(3) first;
10)更改表名:alter table tablename rename [to] new_tablename
EG:alter table emp rename emp1;

DML语句:

DML操作是指对数据库中表记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select),是开发人员日常使用最频繁的操作。
1)插入记录:
insert into tablename (field1……) values(value1……);
EG:insert into emp (ename,hiredate,sal,deptno) values(‘zzx1’,’2000-01-01’,’2000’,1);
insert into emp values(‘lisa’,’2003-02-01’,’3000’,2);
含可空字段、非空但是含有默认值的字段、自增字段,可以不用在insert后的字段列表里面出现,values后面只写对应字段名称的value。没写的字段可以自动设置为NULL、默认值、自增的下一个数字,这样在某些情况下可以大大缩短SQL语句的复杂性。可以一次性插入多条记录,之间用,隔开。
2)更新记录:
update tablename set field1=value1,field2=value2,…… [where condition]
EG:update emp set sal=4000 where ename=’lisa’;
3)删除记录:delete from tablename [where condition]
EG:delete from emp where ename=’dony’;
注意:不管是单表还是多表,不加where条件将会把表的所有记录删除,所以操作时一定要小心。
4)查询记录:
查询所有的记录:select * from tablename [where condition]
EG:select * from emp;
select ename,hiredate,sal,deptno from emp;
查询不重复的记录:
有时候需要将表中的记录去掉重复后显示出来,可以用distinct关键字来实现:
EG:select distinct deptno from emp;
条件查询:
EG:select * from emp where deptno=1;
where后面的条件是一个字段的比较,可以使用>、<、>=、<=、!=等比较运算符;多个条件之间还可以使用or、and等逻辑运算符进行条件联合查询
EG:select * from emp where deptno=1 and sal>3000;
5)排序和限制:
取出按照某个字段进行排序后的记录结果集,这就用到了数据库的排序操作,用关键字order by来实现
select * from tablename [where condition] [order by field1 [desc/asc]……]
EG:select * from emp order by sal;
如果对于deptno相同的记录使用sal由高到低排序(asc相反)
EG:select * from emp order by deptno,sal desc;
对于排序后的记录,如果希望只显示一部分,而不是全部,这时可以使用limit关键字
select …… [limit offset_start,row_count]
其中offset_start表示记录的起始偏移量,row_count表示显示的行数。
EG:select * from emp order by sal limit 3;
select * from emp order by sal limit 1,3;
6)聚合:
select [field1……] fun_name from tablename [where condition] [group by field1……] [with rollup] [having where_condition]
fun_name表示要做的操作,也就是聚合函数,常用的有sum(求和)、count()(记录数)、max(最大值)、min(最小值)。
group by关键字表示要进行分类聚合的字段。
with rollup是可选语法,表明是否对分类聚合后的结果再进行汇总。
having关键字表示对分类后的结果再进行条件的过滤。
EG:select count(1) from emp;
select deptno,count(1) from emp group by deptno;
select deptno,count(1) from emp group by deptno with rollup;
select deptno,count(1) from emp group by deptno having count(1)>1;
7)表连接:
当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能。从大类上分,表连接分为内连接和外连接,它们之间的最主要区别是,内连接仅选出两张表中互相匹配的记录,而外连接会选出其它不匹配的记录,我们常用的是内连接。
内连接:select ename,deptname from emp,dept where emp.deptno=dept,deptno;
外连接又分为左连接和右连接,具体定义如下:
左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录
右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录
EG:select ename,deptname from emp left join dept on emp.deptno=dept.deptno;
select ename,deptname from dept right join emp on emp.deptno=dept.deptno;
8)子查询:
某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候,就要用到子查询。用于子查询的关键字包括in、not in、=、!=、exists、not exists等。如果子查询记录数唯一,还可以用=代替in
EG:select * from emp where deptno in(select deptno from dept);
对应的表连接为 select emp.
from emp,dept where emp.deptno=dept.deptno;
9)记录联合:
我们经常会碰到这样的应用,将两个表的数据按照一定的查询条件查询出来后,将结果合并到一块显示出来,这个时候就要使用union和union all关键字来实现实现这样的功能:
select * from t1
union/union all
……
select * from tn;
union和union all的主要区别是union all是把结果集直接合并在一起,而union是将union all后的结果进行一次distinct,去除重复记录后的结果。
EG:select * from emp
union
select deptno from dept;

DCL语句:

DCL语句主要是DBA用来管理系统中的对象权限时使用,一般的开发人员很少使用。
创建一个数据库用户z1,具有对sakila数据库中所有表的select/insert权限:
grant select,insert on sakila.* to ‘z1’@’localhost’ identified by ‘123’;
收回部分权限:
revoke insert on sakila.* from ‘z1’@’localhost’;
可以使用‘? contents’命令来显示所有可供查询的分类,用?查询相对应的帮助

参考书籍:深入浅出MySQL

猜你喜欢

转载自blog.csdn.net/weixin_38337616/article/details/88294139