数据库指:长期存储在计算机内,有组织的,可共享的数据集合。
数据模型的三要素是:数据结构(静态特征),数据操作(动态特征)和·完整性约束条件。
数据库系统是由硬件,软件,数据构成的。
数据库类型可以分别为三类,分别是层次模型数据库,网状模型数据库,关系模型数据库。
MySQL是一种目前非常流行的关系型数据库管理系统,关系型数据库管理系统就是管理关系型数据库,并将数据组织为相关的行和列的系统。
SQL的语句可以分为四类,分别是数据定义语句,数据操作语句,数据控制语句,事务处理语句。
数据库的特点:实现了数据独立性,实现了数据共享,减少了数据冗余度,实现了数据的集中控制,维护了数据完整性。
MYSQL的优势:运行速度快,具有高效的查询速度;
对于大多数个人免费;
支持 Linux、Mac OS、Windows等多种操作系统;
为C,C++,Python,Java,Perl,PHP,Ruby 和.NET等多种编程语言提供了API;
支持多线程,充分利用了 CPU 资源;
既能作为一个单独的应用程序应用在客户端/服务器网络环境中,也能作为一个库嵌入到其他软件中;
支持多种存储引擎;
可复制全局事务标识,支持自我修复式集群。
MySQL的登录密码;
mysql-uroot-p1234
展示数据库:SHOW DATABASES
创建数据库:CREATE DATABASE
判断数据库是否存在,如没有则创建,如存在,不报错。:CREATE DATABASE IF NOT EXISTS
删除数据库:DROP DATABASE
选择数据库:USE
查看数据库:SHOW DATABASES;
查看数据库中的所有表:SHOW TABLES;
存储引擎:SHOW ENGINES \G
查看mysql默认存储引擎:SHOW VARIABLES LIKE
建表:CREATE TABLE (表名)(
查看表:SELECT * FROM (表名);
查看表结构:DESC (表名);
设置主键约束:PRIMARY KEY
设置自增约束:AUTO_INCREMENT
设置非空约束:NOT NULL
设置唯一约束:UNIQUE
设置无符号约束:UNSIGNED
设置默认约束:DEFAULT
设置外键约束:CONSTRAINT key_name FOREIGN KEY(child_col_name)
REFERENCES parent_table_name(parent_col_name)
设置存储引擎:)ENGINE=(引擎名)
查看建表语句:SHOW CREATE TABLE
查看表基本结构:DESCRIBE
修改表名:ALTER TABLE (表名) RENAME (表名);
修改字段数据类型:ALTER TABLE (表名)MODIFY (字段)(数据类型)
修改字段名:ALTER TABLE (表名) CHANGE (字段) (值)(数据)
添加字段:ALTER TABLE (表名) ADD (字段)(数据)
删除字段:ALTER TABLE (表名) DROP (字段)
修改字段顺序:ALTER TABLE (表名) MODIFY (字段) FIRST|AFTER (字段)
修改存储引擎:ALTER TABLE (表名) ENGINE=(引擎)
删除没有被关联的表:DROP TABLE IF EXISTS (表名),(表名)
删除其他表被关联的主表:ALTER TABLE (表名) DROP FOREIGN KEY (外键名)
第六章
插入数据
指定字段及其值:INSERT INTO (表名) (字段)VALUES(值)
不指定字段只列出字段值:INSERT INTO (表名) VALUES(值)
向表中指定字段插入数据:INSERT INTO (表名)(字段) VALUES(值)
同时插入多条数据:INSERT INTO (表名)(字段) VALUES(值)
将g表中的数据插入到c表中
将其他表中的数据插入到表中:INSERT INTO (c表名)(字段)SELECT (字段) FROM (g表名)
修改数据
将c表中的num值统一改为0
修改所有数据:UPDATE (表名c) SET (字段 num)= (数据 0)
修改d表中的tyoe值为“书籍”,num值修改为“10”
修改指定数据:UPDATE (表名) SET(字段num)= (数据 10) WHERE (字段tyoe)=(数据 “书籍”)
将id值小于5的员工的num值加1
修改指定数据:UPDATE (表名) SET sum=sum+1 WHERE id<5
删除数据
删除所有数据:DELETE FROM (表名)
删除指定数据:DELETE FROM (表名) WHERE (字段)
删除c表中id值大于5
DELETE FRPM (表名c) WHERE id<5
单表数据记录查询
查询所有字段:SELECT * FROM (表名)
查询指定字段:SELECT (字段) FROM (表名)
使用 "="符号查询
从c表中查询id值为1的记录
查询指定记录:SELECT * FROM (表名c) WHERE (字段id)=(数据1)
使用 ">="符号查询
从c表中查询num值大于等于100的值
查询指定记录:CELECT * FROM (表名c) WHERE (字段num)>=(数据100)
多条件查询
使用AND关键字查询
从b表中查询price值大于50,并且id值大于3的记录
SELECT * FROM (表名b) WHERE(字段price)>(数据50) AND (字段id)>(数据3)
使用OR关键字查询
SELECT * FROM (表名b) WHERE(字段type)>(数据"书籍") OR (字段type)>(数据"书籍")
使用IN关键字查询
查询c表中id值为1和3的记录
SELECT * FROM (表名c) WHERE (字段id) IN (数据1,3)
IN关键字还可以和NOT关键字配合使用,作用是查询字段不在指定集合中的记录
查询c表中id值不为1和3的记录
SELECT * FROM (表名c) WHERE (字段id) NOT IN (数据1,3)
查询空值
查询c表中num值为NULL的记录
SELECT * FROM (表名c) WHERE (字段num)IS NULL
IS NULL 也可以和NOT关键字配合使用,用于查询字段值不为NULL的记录
查询c表中num值不为NULL的记录
SELECT * FROM (表名c) WHERE (字段num)IS NOT NULL
查询c表中num值不等于100的记录
SELECT * FROM (表名c) WHERE (字段num)<>100
查询结果不重复
查询c表中字段type的值
SELECT (字段type) FRPOM c
范围查询
NYLQS提供BETWEEN AND 关键字,用于查询字符值在某个范围的记录
查询c表中price值为2.5到50的商品名称价格
SELECT (商品名称name),(价格price) FROM (表名c) WHERE (字段price) BETWEEN (数据2.5) AND (数据50)
字符匹配查询
通配符“%”
查询goods表中name值以“果”开头的记录
SELECT * FROM (表名goods) WHERE (商品名称name) LIKE '果%'
通配符“_”
查询goods表中name值以“西”开头,“西”后有两个字符的记录
SELECT * FROM (表名goods) WHERE (商品名称name) LIKE '西__'
排序查询
单字段排序
查询goods表中id、name和add_time字段的数据,并按照add_time字段值进行排序
SELECT id,name,add_time FROM (表名good) ORDER BY add_time
多字段排序
查询goods表中所有记录,并按照price和name字段值进行排序
SELECT * FROM (表名goods) ORDER BY price,name
降序排序
将goods表中所有记录查询出来,并按照price字段降序排序
SELECT * FROM (表名goods) ORDER BY price DESC
限制查询结果的数量
将goods表中的前3条记录查询出来
SELECT * FROM (表名goods) LIMIT 3
聚合函数和分组数据记录查询
使用聚合函数查询
COUNT()函数
用于统计数据记录条数,用于返回表中记录的条数,或者符合特定条件的记录条数
COUNT(*):计算表中总的记录数,不管表字段中是否包含NULL值
COUNT(col_name):计算表中指定字段的记录数,在具体统计时将忽略NULL值
查询goods表中总的记录条数
SELECT COUNT(*) AS goods_num FROM goods
SUM()函数
是一个求总和的函数,用于返回指定字段值的总和,或符合特定条件的指定字段值总和,在具体计算时将忽略NULL值
使用方法:SUM(col_name)
查询goods表中商品库存的总和
SELECT SUM(num) goods_num FROM goods
AVG()函数
是通过计算返回的行数和每一行数据的和,得到指定列数据的平均值,在具体计算是将忽略NULL值。AVG()函数与GROUP BY一起使用,可以计算每个分组的平均值
查询goods表中每个商品类别的平均价格
SELECT type,AVG(price) FROM goods GPOUP BY type
MAX()函数和MIN()函数
查询goods表中商品的最高价格和最低价格
SELECT MAX(price) maxpri,MIN(price) minpri FROM goods
分组查询
简单分组查询
将GROUP BY 关键字与聚合函数 COUNT() 一起使用,可以查询每组的数量
将goods表中的记录按照type字段(食品类别) 进行分组,并统计每组的数量
SELECT type,count(*) FROM goods GROUP BY type
将goods表中的记录按照type 字段进行分组,并显示没组中的商品名称
SELECT type,group_coucat(name) FROM goods GROUP BY type
使用HAVING 过滤分组后数据
GROUP BY 和 HAVING 一起使用,可以指定显示记录所需满足的条件,作业满足条件的分组才会被显示
将goods表中的记录按照type字段分组并统计每组的数量,然后只取商品数量大于1的分组
SELECT type,count(*) FROM goods GROUP BY type HAVING COUNT(*)>1
使用多个字段进行分组
使用 GROUP BY 不止可以按照一个字段进行分组,还可以按多个字段进行分组,分组层次从左往右,即先按第1个字段进行分组,然后对第1个字段值相同的记录,再根据第2个字段进行分组,以此类推
将goods表中的记录按照type和num字段进行分组并统计,显示那个分组中商品类别、库存、商品名称和商品数量
SELECT type,num,group_concat(name),count(name) FROM goods GROUP BY type,num
连接查询
内连接查询
普通内连接查询
在staff表和section表之间使用内连接查询,从staff表中查询staff_id(员工ID)、name(姓名)、sex(性别) 和phone_number(手机号),从section表中查询section_title(部门名称)
两个表都有相同数据类型的字段section_id,可以通过该字段建立联系。为此,首先选择数据库staff,然后执行内连接查询语句
SELECT staff_id,name,sex,section_title,phone_number
FROM staff INNER JOIN section
ON staff.section_id=section.section_id
自连接查询
内连接查询中有一特殊的查询,称为自连接查询,它是指连接查询中涉及的两张表在物理上是同一张表,但逻辑上可以看成两张表,语法如下:
SELECT table_alias1.*,table_alias2.* FROM table_name AS table_alias1
INNER JOIN table_name AS table_alias2 ON condition
意义是:将一张表分别命名为table_alias1和table_alias2,然后使用这两个表名进行自连接查询
外连接查询
运算符
算术运算符
是mysql中最基本的运算符,主要用于执行数值运算。
运算符 作用
+ 执行加法运算,用于获得一个或多个值的和
- 执行减法运算,用于从一个值中减去另一个值
* 执行乘法运算,得到两个或多个值的乘积
/(DIV) 执行除法运算,用一个值除以另一个值得到商
%(MOD) 执行求余运算,用一个值除以另一个值得到余数
执行SQL语句,获取各种算术运算结果
SELECT 4+2,4-2,4*2,4\2,4&3
在除法运算和求余运算中,如果除数为0将是非法运算,返回结果为NULL
SELECT 6\0,9%0
运算符不仅可以直接操作数值,还可以操作表中的字段
根据月薪值,计算8.1节创建的c表中员工的年薪
SELECT name AS 员工姓名,money AS 薪资,money*12 AS 年薪 FROM c
比较运算符
作用是将表达式中的两个操作数进行比较,比较结果为真,则返回1,为假则返回0,结果不确定则返回NULL
运算符 作用
=(<=>) 等于
< 小于
> 大于
<= 小于等于
>= 大于等于
<> (!=) 不等于
BETWEEN AND 判断一个值是否在两个值之间
IN 判断一个值是否在某个集合中
IS NULL 判断一个值是否为NULL
LIKE 通配符匹配,判断一个值是否包含某个字符
REGEXP 正则表达式匹配