目录
1.数据库常见概念
1.DB:数据库,存储数据的容器
2.DBMS:数据库管理系统,又称为数据库软件或数据库产品,用户创建或管理DB
常见DBMS:MySQL、Oracle、DB2、SqlServer等
3.SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有主流数据库软件通用的语言
2.数据库存储数据的特点
1.数据存放到表中,然后再放到库中
2.一个库中可以有多张表,每张表具有唯一的表名来标识自己
3.表中有一个或多个列,列又称为“字段”,相当于java中“属性”
4.表中的每一行数据,相当于java中的“对象”
3.SQL语言分类
DML
数据操纵语言,用于添加、删除、修改数据库记录,并检查数据完整性
关键字:insert, delete, update 等
DDL
数据定义语言,用于库和表的创建、修改、删除
关键字:create, drop,alter等
TCL
数据事务语言
DQL
数据查询语言,用来查询数据库中表的记录(数据)
关键字:select, where 等
今天主要重点讲解DQL
4.MySQL服务的启动和停止以及常见命令
MySQL服务的启动和停止:
方式一:计算机——右击管理——服务——MySQL
方式二:通过管理员身份运行cmd命令提示行
net start mysql(启动服务)
net stop mysql(停止服务)
常见命令:
1、查看当前所有的数据库
show databases;
2、打开指定的库
use 库名
3、查看当前库的所有表
show tables;
4、查看其他库的所有表
show tables from 库名;
5、创建表
create table 表名( 列名 列类型, 列名 列类型,...... );
6、查看表结构
desc 表名;
7、查看服务器的版本
方式一:登录到mysql服务端 select version();
方式二:没有登录到mysql服务端 mysql --version 或者 mysql --V
5.DQL查询语言
5.1基础查询
1. 查询表中所有记录
select * from 表名;
2. 基础查询
1. 多个字段的查询
select 字段名1,字段名2... from 表名;
注意:
如果查询所有字段,则可以使用*来替代字段列表。
2. 去除重复:
distinct3. 计算列
一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
表达式1:哪个字段需要判断是否为null
如果该字段为null后的替换值。
4. 起别名:
as(可以省略)列名
例如有一个student表,里面的字段有name age score,我要查询他的名字和年龄,并且列名就叫名字和年龄:select name as 姓名,age as 年龄 from student;
5.2条件查询
概念:
语法格式
select 查询列表 from 表名 where 筛选条件;
执行顺序
先表名,再条件,最后查询列表
分类:
一、按条件表达式筛选
简单条件运算符:> < = != <>(不等于) >= <=
二、按逻辑表达式筛选
逻辑运算符:&& || ! and or not
三、模糊查询
like、between and、in、is null、is not null
like
一般和通配符搭配使用
通配符:
% (百分号)任意多个字符,包含0个字符
_ (下划线)任意单个字符
between and
1、使用between and可以提高语句的简洁度
2、包含临界值
3、两个临界值不要调换顺序
in
1、使用 in 可以提高语句简洁度
2、in 列表的值类型必须一致或兼容
3、in 列表中不支持通配符的使用
is null
=或者<>(不等于)不能用于判断null值
is null 或is not null可以判断null值
补充:安全等于:<=>
<=>
既可以判断null值,也可以判断普通类型的数值
缺点:可读性不高,容易等于与不等于弄混
建议用is null
5.3排序查询
语法
select
要查询的东西
from
表
where
条件
order by 排序的字段|表达式|函数|别名 【asc|desc】
执行顺序:先表,再条件,再查询东西,再排序
排序特点:
1、asc是升序,desc是降序,如果不写默认升序
2、order by 子句中可以支持单个字段、多个字段、表达式、函数、别名
3、order by 子句一般是放在查询语句的最后面,limit 子句除外。
5.4分组查询
语法
select 分组函数,字段(要求出现在group by的后面)from 表
【where 筛选条件】
group by 分组的字段
【order by 子句】
注意: where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
5.5多表连接查询
内连接
select 字段列表
from 表名1
[inner] join 表名2 on 条件
where 筛选条件
group by 分组条件
having 分组后的筛选条件
order by 排序字段
外连接
左外连接:
select 字段列表
from 表1
left [outer] join 表2 on 条件
...
右外连接:
select 字段列表
from 表1
right [outer] join 表2 on 条件
...
子查询
1、子查询都放在小括号内
2、子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
- select后面
仅支持标量子查询(单行子查询):结果集为一行一列
- from后面
表子查询:结果集为多行多列
- where或having后面
标量子查询
列子查询
行子查询
- exists后面
标量子,列子,行子,表子查询
3、子查询优先于主查询执行,主查询使用了子查询的执行结果
4、子查询根据查询结果的行数不同分为以下两类:
- 单行子查询
结果集只有一行
一般搭配单行操作符使用:> < = <> >= <=
非法使用子查询的情况:
a、子查询的结果为一组值
b、子查询的结果为空
- 多行子查询
结果集有多行
一般搭配多行操作符使用:any、all、in、not in
in: 属于子查询结果中的任意一个就行
any和all往往可以用其他查询代替
5.6分页查询
limit 起始的条目索引,条目数;
特点:
1.起始条目索引从0开始
2.limit子句放在查询语句的最后
3.公式:select * from 表 limit (page-1)*sizePerPage,sizePerPage
5.7联合查询(union)
语法:
select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
.....
select 字段|常量|表达式|函数 from 表 where 条件
特点:
1、多条查询语句的查询的列数必须是一致的
2、多条查询语句的查询的列的类型几乎相同
3、union代表去重,union all代表不去重