一、数据库概述
数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享,可以存储、维护和管理数据的集合。
MySQL是一种开放的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。其因速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
二、操作数据库
创建数据库:Create database study character set gbk;
查看所有数据库:Show databases;
查看前面创建的study 数据库的定义信息:Show create database study;
修改数据库study 的字符集修改为utf8:alter database study character set utf8;
删除前面创建的study数据库:Drop database study;
查看当前使用的数据库:Select database();
切换数据库:Use mydb;
三、操作数据库表(以study表为例)
1.创建数据库表
语法:
create table 表名(
字段1 字段类型,
字段2 字段类型,
...
字段n 字段类型
);
常用数据类型:
int:整型 double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
char:固定长度字符串类型;varchar:可变长度字符串类型;text:字符串类型;
date:日期类型,格式为:yyyy-MM-dd; time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值 datetime:日期时间类型yyyy-MM-dd hh:mm:ss
CREATE TABLE student(
stuId INT(12),
stuName VARCHAR(12),
sex VARCHAR(12),
major VARCHAR(12)
);
2.插入数据:Insert into student(stuId,stuName,sex,major) value(201701002,“王静”,“女”,“应用物理学”);
3.删除数据:delete from student where stuId=201701002;
4.修改数据:update student set stuName="王晶"where stuId=201701002;
5.查询数据:select * from student where stuId=201701005;
查询数据语法:SELECT列名FROM表名【WHERE --> GROUP BY -->HAVING--> ORDER BY】
在WHERE子句中可以使用如下运算符及关键字:
=、!=、<>、<、<=、>、>=;BETWEEN…AND;IN(set);IS NULL; AND;OR;NOT;
a.模糊查询:模糊查询需要使用关键字LIKE。
通配符:
_ :任意一个字母
% :任意0~n个字母
eg: select * from student where stuName like"田%"; 查询田姓所有学生
b:去除重复记录:两行或两行以上记录中系列的上的数据都相同,使用关键字:DISTINCT
eg:select distinct sex from student;去除查询结果列中的重复项
注:1. IFNULL(sal,0); 将NULL转为0,以便进行运算 2. As:给列名添加别名 3. Order BY 列名 升/降;ASC:升序 DESC:降序 4.limit:用来限定查询结果的起始行,以及总行数(起始行从0开始)。
四、聚合函数:聚合函数是用来做纵向运算的函数
COUNT():统计指定列不为NULL的记录行数;
eg:select count(sex) from student; 查询性别不为NULL的学生数目
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
注:当需要分组查询时需要使用group by 子句,凡和聚合函数同时出现的列名,则一定要写在group by之后。
having与where的区别:
having是在分组后对数据进行过滤,where是在分组前对数据进行过滤。如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。
五、连接查询:
连接查询就是求出多个表的乘积,但是连接查询会产生笛卡尔积,这样的结果并不是我们想要的。可以通过条件进行过滤。通常要查询的多个表之间都存在关联关系,那么就通过关联关系去除笛卡尔积。
1.使用主外键关系做为条件来去除无用信息 (连接语句就是内连接,但它不是SQL标准中的查询方式,可以理解为方言)
eg: select * from a,b where a.column = b.column;
2.内连接(查询结果必须满足条件)
eg: select * from a join b on a.column = b.column;
3.左连接:左连接是以左表为主,右表中满足条件的显示出来,不满足条件的显示NULL。
eg: select * from a left join b on a.column = b.column;
4.右连接:右连接是以右表为主,左表中满足条件的显示出来,不满足条件的显示NULL。
eg: select * from a right join b on a.column = b.column;
5.自然连接:自然连接无需你去给出主外键等式,将连接的表中名称和类型完全一致的列作为条件,它会自动找到这一等式。
eg: select * from a natural join b;
六、子查询:一个select语句中包含另一个完整的select语句
子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。
子查询出现的位置:
where后,作为条为被查询的一条件的一部分;
from后,作表;
当子查询出现在where后作为条件时,还可以使用如下关键字:any、all
eg:SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='JONES')