数据库:MySQL(Ⅰ)

数据库概述

数据库:数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
关系型数据库:是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。
NoSQL:泛指非关系型的数据库。比如键值存储数据库

SQL概述

SQL:结构化查询语言(Structured Query Language),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

分类
  • DDL(Data Definition Language):数据库模式定义语言,用于定义数据库对象,例如库、表、列
  • DML(Data Manipulation Language):数据操作语言,用户通过它可以实现对数据库的基本操作,例如增、删、改数据库中的数据
  • DQL(Data QueryLanguage):数据查询语言,用来查询记录(数据)
  • DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别

MySQL语法

列名的数据类型
数据类型描述举例
int整型id int
double浮点型double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99money double(5,2)
char固定长度字符串类型name char(10)
varchar可变长度字符串类型name varchar(10)
text字符串类型,存大格式的文本,一般不用
blob字节类型,存字节类型的数据,如电影、图片,一般不用
date日期类型,格式为:yyyy-MM-dd
time时间类型,格式为:hh:mm:ss
datetime日期时间类型 yyyy-MM-dd hh:mm:ss
timestamp时间戳类型 yyyy-MM-dd hh:mm:ss,该类型的字段的默认值位当前时间
DDL
对于数据库的操作
-- 创建数据库:CREATE DATABASE 库名
CREATE DATABASE myDemo
-- 删除数据库:DROP DATABASE 库名
DROP DATABASE myDemo
-- 查询所有数据库
SHOW DATABASES
-- 切换使用的数据库:USE 库名
USE myDemo
对于表的操作
-- 创建表:CREATE TABLE 表名(列名1 类型1,列名2 类型2,...)
CREATE TABLE stu_Info(stu_no VARCHAR(10),stu_name VARCHAR(10),stu_age INT)
-- 删除表:DROP TABLE 表名
DROP TABLE stu_Info
-- 查询表的结构:DESC 表名
DESC stu_Info
-- 修改表名:ALTER TABLE 原表名 RENAME TO 新表名
ALTER TABLE stu_Info RENAME TO student
对于列的操作
-- 添加列:ALTER TABLE 表名 ADD 列名 数据类型
ALTER TABLE stu_Info ADD stu_grade DOUBLE(5,1)

-- 删除列:ALTER TABLE 表名 DROP 列名
ALTER TABLE stu_Info DROP stu_grade

-- 修改列的数据类型:ALTER TABLE 表名 MODIFY 原列名 新数据类型
ALTER TABLE stu_Info MODIFY stu_name VARCHAR(15)
-- 修改列名:ALTER TABLE 表名 CHANGE 原列名 新列名 新数据类型
-- 可用于修改列的数据类型
ALTER TABLE stu_Info CHANGE stu_name studentName VARCHAR(20)
DML
对于表中数据的操作
-- 添加数据:INSERT INTO 表名(列名1,列名2,...) VALUES('数据1','数据2',...)
-- 日期和时间数据要使用单引号包裹起来,且要符合格式
INSERT INTO stu_Info(stu_no,stu_name,stu_age,stu_birthday) VALUES('001','James',15,'2002-05-06 10:00:00')
-- 如果给所有字段添加数据可以写成:
INSERT INTO stu_Info VALUES('001','James',15,'2002-05-06 10:00:00')

-- 删除数据
-- 删除表中所有数据:DELETE FROM 表名
DELETE FROM stu_Info
-- 根据条件删除某一行:DELETE FROM 表名 WHERE 条件
-- 删除表stu_Info中stu_name为'James'的一行记录
DELETE FROM stu_Info WHERE stu_name='James'
-- 删除表stu_Info中stu_name为'James'且stu_age为15的一行记录
DELETE FROM stu_info WHERE stu_name='James' AND stu_age=15

--修改数据
-- 将所有记录的stu_no修改为'002'
UPDATE stu_Info SET stu_no='002'
-- 根据条件修改数据:UPDATE 表名 SET 列名=新数据 WHERE 条件
UPDATE stu_Info SET stu_no='003' WHERE stu_name='James'
-- 修改多个数据:UPDATE 表名 SET 列名1=新数据1,列名2=新数据2 WHERE 条件
UPDATE stu_Info SET stu_no='003',stu_age=18 WHERE stu_name='James'
DQL

员工表

CREATE TABLE emp(
	empno INT,
	ename VARCHAR(50),
	job VARCHAR(50),
	mgr INT,
	hiredate DATE,
	sal DECIMAL(7,2),
	comm DECIMAL(7,2),
	deptno INT
)

WHERE 子句

WHERE子句可有条件地从表中选取数据,类似于程序语言中的 if 条件,根据 MySQL表中的字段值来读取指定的数据。
WHERE子句也可以运用于SQL的SELECT、DELETE或者UPDATE命令。

操作符描述
=等号,如果相等返回true
!=不等于,如果不相等返回true
>大于号,如果左边的值大于右边的值返回true
<小于号, 如果左边的值小于右边的值返回true
>=大于等于号,如果左边的值大于或等于右边的值返回true
<=小于等于号, 如果左边的值小于或等于右边的值返回true

也可以使用 AND 、OR等操作符指定一个或多个条件。

SELECT 查询

SELECT 语句用于从数据库中选取数据

-- 格式:SELECT 列名 FROM 表名 WHERE 条件
-- 从指定表中查询符合条件的所有列名的信息
-- 从emp表中查询sal(薪资)大于1500的empno,ename,job,sal列名的信息
SELECT empno,ename,job,sal FROM emp WHERE sal>1500
-- 可以使用AS来给列名指定别名
SELECT empno AS 编号,ename AS 姓名,job AS 职位,sal AS 薪资 FROM emp WHERE sal>1500
-- '*'表示通配符
-- 从emp表中查询sal(薪资)大于1500的所有列名信息
SELECT * FROM emp WHERE sal>1500
SELECT语句中进行计算

在SELECT语句中可以进行计算

SELECT empno AS 编号,ename AS 姓名,sal*12 AS 年薪 FROM emp

注意:NULL参加运算结果为NULL

-- 如果要加上NULL值进行计算,使用IFNULL函数给NULL值指定计算的值
-- IFNULL(v1,v2):如果v1的值不为NULL,则返回v1,否则返回v2。
SELECT empno AS 编号,ename AS 姓名,sal*12+IFNULL(comm,0) AS 年薪 FROM emp 
DISTINCT

DISTINCT关键词用于返回唯一不同的值。

-- 如果表中的sal数据有多个3000只会查询到一条
SELECT DISTINCT sal FROM emp WHERE sal=3000
-- 会查询到多项记录,因为姓名具有差异
SELECT DISTINCT ename,sal FROM emp WHERE sal=3000
ORDER BY 排序

ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序,默认按照升序对记录进行排序

-- 根据sal(薪资)进行升序排序
SELECT * FROM emp ORDER BY sal ASC
-- 根据sal(薪资)进行降序排序
SELECT * FROM emp ORDER BY sal DESC

-- 可定义第二排序条件
-- 对根据sal(薪资)的排序结果再次按照comm(奖金)进行排序,默认为升序
SELECT * FROM emp ORDER BY sal,comm
-- 也可分别指定排序方式
SELECT * FROM emp ORDER BY sal ASC,comm DESC
常见操作符的使用

AND操作符
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

-- 从emp表中查询sal(薪资)大于1500且小于3000的所有列名信息
SELECT * FROM emp WHERE sal>1500 AND sal<3000

OR操作符
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

-- 从emp表中查询sal(薪资)小于1000或大于3000的所有列名信息
SELECT * FROM emp WHERE sal<1000 OR sal>3000

BETWEEN操作符
BETWEEN操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。

--  从emp表中查询sal(薪资)在1500到3000之间的所有列名信息
SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000
-- 相当于
SELECT * FROM emp WHERE sal>=1500 AND sal<=3000

IN操作符
IN操作符允许您在 WHERE 子句中规定多个值。

-- 从emp表中查询job(职位)为'CLERK'或'ANALYST'的所有列名信息
SELECT * FROM emp WHERE job IN('CLERK','ANALYST')

IS NULL操作符和IS NOT NULL操作符
对于NULL值有专有的操作符判断值是否为空

-- 从emp表中查询comm(奖金)为NULL的所有列名信息
SELECT * FROM emp WHERE comm IS NULL
-- 从emp表中查询comm(奖金)不为NULL的所有列名信息
SELECT * FROM emp WHERE comm IS NOT NULL

NOT操作符
代表非,一般和其他操作符一起使用

-- 从emp表中查询job(职位)不为'CLERK'或'ANALYST'的所有列名信息
SELECT * FROM emp WHERE job NOT IN('CLERK','ANALYST')
--  从emp表中查询sal(薪资)不在1500到3000之间的所有列名信息
SELECT * FROM emp WHERE sal NOT BETWEEN 1500 AND 3000
-- 相当于
SELECT * FROM emp WHERE NOT (sal>=1500 AND sal<=3000)
LIKE 子句

可以在WHERE子句中使用LIKE子句,进行模糊查询,类似于根据关键词搜索

--  _:匹配单个任意字符  %:匹配多个任意字符
-- 从emp表中查询姓名中包括'a'的所有列名信息,结果不区分大小写
SELECT * FROM emp WHERE ename LIKE '%a%'
-- 从emp表中查询姓名以'a'开头的所有列名信息
SELECT * FROM emp WHERE ename LIKE 'a%'
-- 从emp表中查询姓名以'k'结尾的所有列名信息
SELECT * FROM emp WHERE ename LIKE '%k'
-- 从emp表中查询姓名的第二个字符为'm'的所有列名信息
SELECT * FROM emp WHERE ename LIKE '_m%'
-- 从emp表中查询姓名为5个字符的所有列名信息,LIKE后是5个_
SELECT * FROM emp WHERE ename LIKE '_____'
-- 可以使用LIKE子句代替等号 =
-- 从emp表中查询姓名为'Smith'的所有列名信息
SELECT * FROM emp WHERE ename LIKE 'Smith'
聚合函数
AVG()函数

AVG()函数返回数值列的平均值。

-- 查询emp表中的sal(薪资)的平均值
SELECT AVG(sal) AS 平均工资 FROM emp
COUNT()函数

COUNT()函数返回匹配指定条件的行数。

-- 查询具有奖金的人数
SELECT COUNT(comm) FROM emp

NULL值不参与统计

MAX()函数和MIN()函数

MAX()函数返回指定列的最大值
MIN()函数返回指定列的最小值

-- 查询最高薪资
SELECT MAX(sal) AS 最高薪资 FROM emp
-- 查询最低薪资
SELECT MIN(sal) AS 最低薪资 FROM emp
SUM()函数

SUM()函数返回数值列的总数。

-- 返回薪资的总和
SELECT SUM(sal) AS 薪资总和 FROM emp
GROUP BY 语句

GROUP BY语句用于结合聚合函数,根据一个或多个列对结果集进行分组。

-- 从表emp中根据deptno(部门编号)进行分组查询每个部门的平均工资
SELECT deptno 部门编号,AVG(sal) 平均工资 FROM emp GROUP BY deptno
-- 查询各部门sal(薪资)大于1500的人数,WHERE子句的条件放在GROUP BY之前
SELECT deptno 部门编号,COUNT(*) 人数 FROM emp WHERE sal>1500 GROUP BY deptno
HAVING 子句

在SQL中增加HAVING子句原因是,WHERE关键字无法与聚合函数一起使用。
HAVING子句可以让我们筛选分组后的各组数据。

-- 查询平均薪资大于2000的部门
SELECT deptno 部门编号,AVG(sal) 平均薪资 FROM emp GROUP BY deptno HAVING AVG(sal)>2000

-- 查询各部门中sal(薪资)大于1500的人员的平均工资
SELECT deptno 部门编号,AVG(sal) 平均薪资 FROM emp WHERE sal>1500 GROUP BY deptno

WHERE和HAVING的区别:
WHERE子句位于GROUP BY之前,用于在分组前根据条件进行筛选,不满足条件的不参与分组
HAVING子句位于GROUP BY之后,用于对分组后的数据进行二次筛选

LIMIT

LIMIT限制查询到的记录项

-- SELECT 要查询的列名信息 FROM 表名 LIMIT 记录项索引,记录项数
-- 从第1项记录开始查询,查询4项记录
SELECT * FROM emp LIMIT 0,4
-- 从第5项记录开始查询,查询5项记录
SELECT * FROM emp LIMIT 4,5

可使用LIMIT完成记录的分页展示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值