了解数据库
数据库 (database DB)
表(table)
列(column):表中的一个字段(所有表都是一个或多个列组成的)
字段别名: 原字段名 as 新别名
数据类型(datatype)
行(row):表中的一个记录
主键:可以确定该行的唯一标识 (主键不允许NULL值)
数据库分类:网络型数据库
层级型数据库
关系型数据库
使用数据库(DDL数据定义语句)
数据库登录:mysql -u root (-h主机名loaclhost或IP地址)(-p端口号3306) -p密码
使用数据库:use 库名;
显示所有库:show databases;
显示库内的所有表:show tables;
显示特定创建的库或表:show create database 库名/table 表名
创建库或表:create table/database[if not exists] 表名/库名
创建表结构 create table 表名(
字段名1 数据类型 [约束条件], …
[其他约束条件], [其他约束条件]
)其他选项(例如存储引擎、字符集等选项)
显示错误:show erroys/warnings
查看表结构:desc 表名
新增加新的字段 alter table 表名 add 列名 类型(长度) 约束;
修改指定列的属性 alter table 表名 modify 列名 类型(长度) 约束;
修改指定列的名字 alter table 表名 change 原列名 新列名 类型(长度) 约束;
删除字段 alter table 表名 drop 列名 类型(长度) 约束;
数据操作语言(DML)
(不影响表中的结构)
增 insert语句: 插入所有字段内容 insert into 表名 values (相应的字段的内容列表)
插入指定字段内容 insert into 表名(字段列表) values (相应的字段的内容列表)
查 select语句:查询表中所有数据 select * from 表名
查询表中某个字段的数据 select 字段列表 from 表名
查询数据的基本语法: select 字段列表 from 表名 [where 条件] group by 字段 [ having 过滤分组] orderby asc/desc limit 限制行数
改 update语句:更新指定行的某个数据 update 表名 set 列名= 新值 where 列名 = 某值
删 delete语句:delete from 表名 where 条件
约束类型
primary key 主键 表中某列的每一行的唯一标识 不能为空,
foreign key 外键 外键为本表中的一个字段,不是本表的主键,但对应另一个表的主键。
not null 非空约束 该字段数据不能为空
unique 唯一键 该列唯一,允许为空,保证数据不重复
check 检查
default 设置默认值
查看创建表语句 show create table
特殊比较运算符
between...and...查询两个值之间的范围。
in(相应值列表) 查询要比较的值是否和集合列表中的任何一个值相等。
like 在where子句中使用,可与%连用,用于搜素包含特定元素的行
is null 判断要比较的值是否为空
通配符
% 代表一个或任意更多个字符
_ 代表一个字符
逻辑运算符
与,或,非(not)
order by 子句
order by asc/desc asc 升序排序(默认升序) desc 降序排序
ORDER BY 子句必须写在SELECT语句的最后
分组函数
sum( ) 求和函数
max( )求最大值
min( )求最小值
avg( )求平均值
消除重复行的关键字Distinct
在分组函数中使用IFNULL函数 IFNULL 函数可以使分组函数强制包含含有空值的记录
SELECT AVG ( IFNULL(comm,0) ) FROM emp;
group by 指定要分组的字段 having 过滤分组
ORDER BY子句后列名可以用数字来代替,这个数字是SELECT语句后列的顺序号
多表链接查询
as 列别名与表别名
联合查询 union union 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
交叉连接 表1 cross join 表2
原理 1、 从第一张表依次取出每一条记录
2、 取出每一条记录之后,与另外一张表的全部记录挨个匹配
3、 没有任何匹配条件,所有的结果都会进行保留
4、 行数 = 表1行数 * 表2行数;字段数 = 表1字段数 + 表2字段数(产生笛卡尔积)
等值连接:获取两个表相同的字段
自然连接:natural join 连接两个具有相同数据类型和字段的表
内连接:表1 inner join 表2 on 匹配条件,从一张表中取出所有的记录去另外一张表中匹配
原理 :1、 从第一张表中取出一条记录,然后去另外一张表中进行匹配
2、 利用匹配条件进行匹配:
2.1 匹配到:保留,继续向下匹配
2.2 匹配失败:向下继续,如果全表匹配失败,结束
可以使用 using(字段)进行等值连接
自连接:例:
-- 查询每个员工 的姓名和直接上级姓名?
-- SELECT e.emp_name,m.emp_name
-- from emp e,emp m
--where e.mgr = m.emp_no
左外连接: left join 可读取左表中的全部数据,即便左表中没有可匹配的。
右外连接: right join 可读取右表中的全部数据,即便左表中没有可匹配的。
子查询: 子查询作为主查询的条件存在
单行运算符:>、=、>=、<、<>、<=
多行运算符: IN、ANY、ALL
单行子查询:返回单行单列
多行子查询:返回单列多行
多列子查询:返回多行多列
网友评论