一.什么是数据库
数据库是指能够长期存储在计算机上,按照一定的规则组织起来,可以被各种用户应用或者共享的数据集合。
二.什么是数据库管理系统
数据库管理系统指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系 统访问数据库中的数据。数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。
三.常见的数据库管理系统有哪些
1.Oracle:又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。
2.MySQL:MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS应用软件之一。
3.SQL sever:美国Microsoft公司推出的一种关系型数据库系统。SQL Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。
四.SQL语句分类
DDL(Data Denition Language):数据定义语言,用来定义数据库对象:库、表、列等。
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)增删改。
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询。
需要注意的是,SQL语句中的关键字不区分大小写,并且每条SQL语句要以;结尾,所有的符号都是英文状态下的
五.数据库的基本操作
1.怎么创建一个数据库
create database 数据库名;
例如
create database shujuku;
在创建数据库的过程当中还可以加上编码方式和排序规则
例如
create database shujuku character set GBK(编码方式) collate gbk_chinses_ci(排序规则);
2.怎样查看数据库
show databases;
这样可以查看所有的数据库
3.查看前面创建的数据库中的定义信息
按照上面创建了一个数据库shujuku的情况下可以进行如下操作
show database 数据库名;
例如
show database shujuku;
4.修改数据库
alter database 数据库名 character set 编码方式;
例如
alter database shujuku character set utf8;
5.删除数据库
drop database 数据库名;
例如
drop database shujuku;
6.切换数据库
use 数据库名;
例如
use shujuku;
六.数据类型
七.表操作
1.查看当前数据库中所有的表
show tables();
2.查看表的字段信息
desc 表名;
例如
desc biao;
3.删除数据库中的表
drop table 表名;
例如
drop table biao;
4.在表中增加一列
alter table 表名 add 新列名 新的数据类型;
例如
alter table biao add id int;
5.在表中修改一列
比如要修改name列,使其长度变为10
alter table 表名 change 旧列名 新列名 新的数据类型;
例如
alter table biao change name name varchar(10);
如果不需要改变列名两个列名一致就可以
6.在表中删除一列
alter table 表名 drop 列名;
例如
alter table table drop name;
在删除的时候不需要加数据类型
7.修改表名
alter table 旧表名 rename 新表名;
例如
alter table biao1 rename biao2;
8.查看表格创建的细节
show create table 表名;
例如
show create table table_name;
9.修改表的字符集为utf8
alter table 表名 character set 编码方式;
例如
alter table table_name character set utf8;
八.对表中的数据进行操作
在对表中的数据进行操作中主要有增删改查几个操作,关键字是insert,delete,update,select
1.插入一条数据
insert into 表名 (列名) values (数据值);
例如
insert into table (id,name,age) values (1,'张三',18);
注意在进行操作的时候如果对字符串或者日期类型的数据进行增删查改等操作,需要加单引号('')
2.插入多条数据
insert into 表名 (列名) values (数据值1),(数据值2),(数据值...);
例如
insert into table (id,name,age) values (2,'李四',29),(3,'王五',20),(4,'赵六',23);
在进行操作的时候,前面的数据类型和后面的值要一 一对应起来,如果有参考值的话不能超出参考值
3.删除数据
delete from 表名 where 值;
例如
delete from table where id=1;
4.查找数据
select *(*代表所有的数据,也可以根据自己的需要更改) from 表名;
例如
select * from table;
5.修改数据
update 表名 set 列名=列值 where 列名=值;
例如
update table set name='张大' where id=1;
前面的列名和后面的列名不需要一致
九.条件查询
条件查询就是在查询的时候给出where子句,在where的后面添加条件,在where子句中常用的关键字和运算符有:=、!=、<>、<、>、<=、>=、between...and、is null、 or、and等
1.查询性别为女,并且年龄50以内的记录
select * from table where age='女' and age <50;
在这个SQL语句中性别为女和年龄小于50岁就是条件,会筛选出所有性别为女性且年龄在50以下的数据
2.查询学号为S_1001,或者姓名为liSi的记录
select * from table where id='S_1001' or name='liSi';
在这个SQL语句中学号为S_1001和姓名为liSi就是条件,会筛选出学号或者姓名满足其一的记录
3.查询学号为1,2,3的记录
select * from table where id in (1,2,3);
在这个SQL语句中只查询学号为1,2,3的数据,可以使用in()来进行处理
4.查询学号不是1,2,3的记录
select * from table where id not in(1,2,3)
在上一条语句中是在1,2,3中的,前面加not代表不在这三个中的数据
5.查询年龄为null的记录
select * from table where age is null;
在SQL语句中null表示空值,注意控空值不等于0
6.查询年龄在20到40之间的学生记录
select * from table where age > 20 and age <40;
这样用一个大于一个小于用and连起来可以表示20到40之间的记录,还有另一种写法
select * from table where between 20 and 40;
between...and是在多少到多少之间
7.查询性别非男的学生记录
select * from table where sex !='男';
!=一个感叹号一个等于是不等于的意思
十.模糊查询
当要查询的东西不知道具体在哪,或者说只知道一部分的时候就要用模糊查询,要用关键字LIKE
关键字_等于任意一个字符,关键字%等于任意n个字符
例如
1.查询姓名由3个字构成的学生记录
select * from table where name like '___';(注意这里是三个下划线)
2.查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
select * from table where name like '____i';
这条SQL语句前四个下划线代表四个字符,第五个为i
3.查询姓名以“z”开头的学生记录
select * from table where name like 'z%';
%代表任意个字符以z开头所以第一个字符是z,对之后的字符没做要求所以用%
4.查询姓名中第2个字母为“i”的学生记录
select * from table where name like '_i%'
第二个字符为i所以前面用一个_来表示,后面没要求所以用%表示
5.查询姓名中包含“a”字母的学生记录
select * from table where name like '%a%'
前后都没做要求所以两边都用%来表示
十一.字段控制查询
当查询只需要一个或者几个字段的时候就可以用到字段控制查询
1.查看雇员的月薪与佣金之和
因为sal(月薪)和comm(佣金)两列的类型都是数值类型,所以可以做加运算。如果sal或comm中有一个字段不是数值类型,那么会出错。
select * sal+comm from table;
因为在comm表之中有null,任何东西与null相加都是null,所以上面可能会出现null的情况
select *,sal+ifnull(comm,0) from table;
2.给列名添加别名
因为在字段相加之后会产生的一个新的字段存放结果,所以可以给他添加一个字段名,用as关键字
select *,sal+ifnull(comm,0) as sum from table;
as也可以shenglue
select *,sal+ifnull(comm,0) sum from table;
十二.排序
当数据需要排序时会用到
order by时关键字,asc表示升序,默认也是升序可以省略不写,desc是降序
例如
1.查询所有学生记录,按年龄升序排序
select * from table where order by age asc;
2.查询所有学生记录,按年龄降序排序
select * from table where order by age desc;
3.查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序
select * from table where order by sal desc, deptno asc;
十三.聚合函数
聚合函数用来做纵向运算
COUNT(列名):统计指定列不为NULL的记录行数;
MAX(列名):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN(列名):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算
SUM(列名):计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG(列名):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
1.count
(1)查询table表中记录数:
select count(*) from table;
(2)查询table表中有佣金的人数:
select count(comm) from table;
在count函数中会给出comm的列,所以指挥统计comm列中非null的行数
2.sum
(1)查询所有雇员月薪和:
select sum(sal) from table;
(2)查询所有雇员月薪和,以及所有雇员佣金和:
select sum(sal),sum(comm) from table;
(3)查询所有雇员月薪+佣金和:
select sum(sal+ifnull(comm,0)) from table;
3.avg
(1)统计所有员工平均工资:
select avg(sal) from table;
4.max
(1)统计所有员工最高工资:
select max(sal) from table;
5.min
(1)统计所有员工最低工资:
select min(sal) from table;
十四.分组查询
当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部分来分组。
注意:如果查询语句中有分组操作,则select后面能添加的只能是聚合函数和被分组的列名
例如
1.查询每个部门的部门编号和每个部门的工资和:
select deptno,sum(sal) from table group by deptno;
这行SQL语句查询的是部门和工资和,然后用部门去分组,得到每个部门的编号和工资和
2.查询每个部门的部门编号以及每个部门的人数:
select deptno,count(*) from table croup by deptno;
这行SQL语句查询的是部门和人数记录,然后用部门去分组,得到每个部门的编号和每个部门的人数
十五.HAVING子句
HAVING 子句用于在执行聚合查询后筛选结果集,仅能在包含聚合函数的 SELECT 语句中使用。它在由 GROUP BY 子句创建的分组上设置条件1。HAVING 子句的作用和 WHERE 子句类似,但在聚合结果上进行筛选。
例如
1.查询工资总和大于9000的部门编号以及工资和:
select deptno,sum(sal) from table group by deptno having sum(sal)>9000;
这行SQL语句在算出部门编号和工资和之后又添加了一个条件工资大于9000,所以在满足所有的条件后数据才会显示
十六.LIMIT
limit用来显示查询的起始行数以及查询的总行数,是显示下标的所以起始行是0
例如
1.查询5行记录,起始行从0开始
select * from table limit 0,5;
2.查询10行记录,起始行从3开始
select * from table limit 3,10;