一、数据库的概念
DB 数据库(database):存储数据的“仓库”,保存一系列有组织的数据
DBMS:数据库管理系统(Database Management System)。数据库是通过 DBMS 创建和操作的容器
创建的 DBMS: MySQL、Oracle、DB2、SqlServer 等
SQL:结构化查询语言(Structure Query Language)
SQL:几乎所有的 DBMS 都支持 Sql;简单易学;虽然简单,可以进行非常复杂和高级的数据库操作
数据库 (DB) 的特点:
1、数据先放在表中,表再放到库中
2、一个数据库中可以有多个表,每个表有一个名字,用来表示自己。表明具有唯一性
3、表具有一些特性,类似 java 中“类”的设计
4、表由列组成,我们也称为字段
5、表中数据按行存储,有点类似 Java 中的对象
数据库好处:1、可以持久化保存数据到本地;2、结构化查询
MySQL的常见命令
1、查看当前所有的数据库
show databases;
2、打开指定的库
use 库名
3、查看当前库的所有表
show tables;
4、查看其他库的所有表
show tables from 库名;
5、创建表
create table 表名(
列名 列类型,
列名 列类型,
…
列名 列类型 (最后一行不用加“,”)
)
6、查看表结构
desc 表名;
MySQL 的语法规范
1、不区分大小写,但建议 关键字大写,表名、列名小写
2、每条命令最后用分号结尾
3、每条命令根据需要可以进行缩进或者换行
4、注释:
单行注释: #注释文字
单行注释: – 注释文字 (注意这里面 -与注释文字间要有一个空格)
多行注释:/*
注释文字
*/ (和 java 里面的多行注释一样)
基础查询
语法:
select 查询列表 from 表名;
类似于: System.out.println(打印东西);
特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的表格
起别名:
方式一、用AS
SELECT last_name AS 姓,first_name AS 名 FROM employee
方式二、直接用空格
SELECT last_name 姓,first_name 名 FROM employee
如果别名与关键字相同,我们需要添加一个“ ”给它包起来
去重 :用关键字 DISTINCT
SELECT DISTINCT xxx From xxx
+号的作用
在JAVA中,+号的作用:运算符,来那个操作数为数值型;连接符
MySQL中+号只有一个功能 运算符
两个操作数都为数值型,则做加法运算
若其中一方为字符型,试图将字符型数值转换为数值
如果转换成功,则继续做加法运算
如果转换失败,则将字符型数值转换为 0 进行加法运算
select null+10 只要其中一方为 null 则结果一定为 null
案例:查询员工名和姓连接成一个字段,并显示为 姓名
SELECT CONCAT(‘a’,‘b’,‘c’) AS 结果
条件查询
SELECT 查询列表
FROM 表名
WHERE 筛选条件
分类:一、按条件表达式筛选
条件运算符:> < = !=(<>) >= <=
二、按逻辑表达式筛选
逻辑运算符(作用:用于连接条件表达式):
&& || !
and or not
三、模糊查询:
like
between and (包含临界值;两个临界值从小到大 不能颠倒顺序)
in : 判断某字段的值是否属于 in 列表中的某一项; 我们in 列表的值类型必须要统一或者兼容;括号中不支持通配符的使用
is null: =或< >都不能用于判断 null 值
<=> 安全等于 : 既可以判断 null 值,也可以判断普通的数值
模糊查询的特点:一般和通配符搭配使用。 通配符%:任意多个字符,包含0 个字符 _ :任意单个字符 \为转义字符; escape’ ‘’ 任意转义字符
举例:要求查询名字中第二个字符为_的 员工信息表
SELECT *
FROM employees
WHERE last_name LIKE '_\_%'; 或者 这个地方写成 WHERE last_name LIKE '_$_%' ESCAPE'$'; 这里的$可以为任意字符
举个小例子:查询部门编号不等于 90 的员工名与工作编号
-- 查询部门编号不等于 90 的员工名与工作编号
SELECT first_name,last_name,job_id
From employees
where department_id<> 90;
-- 模糊查询
-- 查询员工名字中包含 字符a 的信息
SELECT *
FROM employees
WHERE
last_name like '%a%';
在编写 SQL 的代码时,一定注意要在语句的最后加上 ;
插入一点 Linux 中的小指令(就当过了眼)
进阶 一:排序查询
语法:
select 查询列表
from 表
【where 筛选条件】
order by 排序列表 【asc|desc】 asc 升序(从小到大) desc 降序(从大到小) 默认为 asc(可以不写 )
特点:order by 字句中可以支持单个字段、多个字段、表达式、函数、别名
order by 一般放在查询语句的最后面,limit 字句除外
进阶二:常见函数
概念:类似 Java 中的方法;将一组逻辑语句封装在方法中,对外暴露方法名
好处:1、隐藏实现细节 2、提供代码的重用性
调用:select 函数名(实参列表) 【from 表】;
关注特点:1、叫什么(函数名) 2、干什么(功能)
分类:1、单行函数 如:concat、length、ifnull 等
2、分组函数(功能:做统计用):又称统计函数
一、字符函数
length() | 用于获取长度 |
---|---|
concat() | 拼接字符串 |
upper、lower() | 大写、小写 |
substr、substring() | 截取 字符串,索引从一开始 |
instr() | 返回子串第一次出现的索引,如果找不到返回零 |
trim() | 去除字符串里面的某个字符 trim(’ 'from ’ ') |
lpad() | 用指定的字符实现字符左边填充填充到指定长度 |
rpad() | 右填充 |
replace() | 替换 |
二、数学函数
round() | 四舍五入 |
---|---|
ceil() | 向上取整(返回大于等于该参数的最小参数) |
floor() | 向下取整(返回<=该参数的最大整数) |
truncated() | 截断 |
mod() | 取余 mod 注(a,b):可以视为: a-a/b *b 其中会有自动取整 |
三、日期函数
now | 返回当前系统日期 |
---|---|
curdate() | 返回当前系统的日期,没有时间 |
curtime() | 返回当前时间,不包含日期 |
获取指定的部分:年、月、日 | Select year(now()) 年 select month(now()) |
str_to_date | 将日期格式的字符转换成指定格式的日期 |
date_format | 将日期转换为字符 |
四、其他函数
version | 看版本 |
---|---|
database | 查看数据库 |
五、流程控制函数
if 函数 | if else 的效果 |
---|---|
case 函数 | 使用一:类似于 Java中 switch case 效果 |
case 函数 | 使用二:类似多重 if |
MySQL 中 case 函数格式一
case 要判断的字段或者表达式
when 常量 1 then 要显示的值或语句一
when 常量 2 then 要显示的值 2 或语句 二
…
else 要显示的值 n 或语句 n
end
case 函数格式二
case
When 条件 1 then 要显示的值 1 或语句 1
when 条件 2 then 要显示的值 2 或语句 2
…
else 要显示的值或 n
End