数据库概念
什么是数据库???
数据库是数据管理的有效技术,是由一批数据构成的有序集合,这些数据被存放在结构化的数据表里。数据表之间相互关联,反映客观事物间的本质联系。数据库能有效地帮助一个组织或企业科学地管理各类信息资源。
数据库发展历程:
1.层次数据库和网状数据库技术阶段,使用指针来表示数据间的联系
2.关系型数据库技术阶段,经典的里程碑阶段。代表DBMS:Oracle、DB2、SQL server、MySQL等
3.非关系型数据库技术阶段,MySQL:结构化数据库技术/非关系型数据库
注意:(1)关系型数据库和非关系型数据库两者各有优缺点,所以是互补关系,而不是谁取代谁
(2)非关系型数据库出现的原因:为弥补关系型数据库存在的:数据模型、性能、拓展伸缩性的缺点
SQL的定义和规则
SQL:结构化查询语言,是关系型数据库的标准语言 #特点:简单、灵活、功能强大 书写规则:1.SQL数据库中,不严格区分大小写 2.为了提高可读性,一般关键字大写,其他小写 3.SQL语句克单行或多行书写 4.SQL语句中,关键字不能跨多行或缩写 5.正确使用空格和缩进,可以增加可读性
创建表
CREATE TABLE 表名 ( 列名1 列的类型 [约束], 列名1 列的类型 [约束], ...... ); #最后一行没有逗号,Ctrl+Q进入编辑器
表的约束
1.非空约束:NOT NULL,不允许某列的内容为空。 2.设置列的默认值:DEFAULT。 3.唯一约束:UNIQUE,在该表中,该列的内容必须唯一。 4.主键约束:PRIMARY KEY, 非空且唯一。 5.主键自增长:AUTO_INCREMENT,从1开始,步长为1。(MySQL特有) 6.外键约束:FOREIGN KEY,A表中的外键列的值必须参照于B表中的某一列(B表主键)。
简单的SQL语句
保存/增加/插入操作
增:INSERT插入语句:一次插入操作只插入一行.其含义是把哪些值插入到哪个表的哪些列中 INSERT INTO 表名 (column1,column2,column3...) VALUES (value1,value2,value3...) 改:UPDATE更新操作:更新哪张表设置哪些列等于哪些值,条件为... UPDATE 表名 SET column1=value1,column2=value2,...WHERE 条件 #注意:如果省略WHERE子句,则全表的数据都会被修改. 删:DELETE删除操作:从哪个表中删除数据 DELETE FROM 表名 WHERE 条件 #注意:如果省略了WHERE字句,则全表的数据都会被删除 查:(1)查明确的列: SELECT 查询的表中的列1,列2,... FROM 表名 WHERE 条件 (2)查所有: SELECT * FROM 表名
加入运算
运算符优先级(遵循数学运算符优先级): (1)乘法和除法的优先级高于加法和减法 (2)同级运算的顺序是从左到右 (3)表达式中使用"括号"的地方会优先进行运算
拼接列值
CONCAT:可以把多个值以字符串的形式拼在一起 SELECT CONCAT(str1,str2,...),列1,列2,... FROM 表名 WHERE 条件 注意: (1)返回结果为连接参数产生的字符串。 (2)如有任何一个参数为NULL ,则返回值为 NULL
设置列名的别名
AS:可以省略,写上可读性更好 作用: 1.改变表的名字 2.用于表示计算结果的含义 3.作为列的别名 练习:查询所有货品的id,名称,各进50个且每个运费1元的成本(使用别名) SELECT id,productName,(costPrice+1) * 50 AS '成本价为' FROM product
过滤查询
比较运算符: = 等于 > 大于 >= 大于等于 < 小于 <= 小于等于 !=(<>) 不等于
区分大小写
要让MySQL查询区分大小写,可以使用BINARY属性
(1)不使用BINARY属性,不区分大小写,结果会出现两条数据,即'AA'和'aa'.
(2)使用BINARY属性,区分大小写,结果只会出现一条数据'aa'.
逻辑运算符
AND(&&) 和 组合条件都是一样的且同级 OR(||) 或 组合条件是或者 NOT(!) 如果拼接的条件是FALSE,返回TRUE
运算符优先级
1 所有比较运算符(= < >)
2 NOT
3 AND
4 OR
注意:括号将跨越所有优先级规则,括号优先级最高
范围查询
between运算符:显示某一值域范围的记录,这个操作符最常见的使用在数字类型数据的范围上,但对于字符类型数据和日期类型数据同样可用,且是闭区间。 格式: SELECT * FROM 表名 WHERE 列名 BETWEEN minValue AND maxValue
集合查询
in运算符,判断列的值是否在指定的集合中 where 列名 in(value1,value2,...);
空值查询
IS NULL:判断列的值是否为空。 空值是特指没有值的列 WHERE 列名 IS NULL; is not null不为空
模糊查询
like运算符:执行通配查询,查询条件可包含文字字符或数字 通配符是用来实现匹配部分值的特殊字符 % 可表示任意个数字符 _ 只可表示一个任意字符
结果排序
order by:实现排序功能 ASC:升序,一般没有指定排序方式都默认升序,可省略 DESC:降序 order by 子句出现在select语句的最后 SELECT * FROM 表名 WHERE 条件 ORDER BY 列1 [ASC/DESC], 列2 [ASC/DESC]... #执行顺序:先执行FROM--->接着执行WHERE--->再执行SELECT--->最后执行ORDER BY
聚合函数
聚合函数:称为分组函数/统计函数/聚集函数,是用来作用于一组数据,并对这组数据返回一条记录 count 统计结果记录数 MAX 统计计算最大值 MIN 统计计算最小值 SUM 统计计算求和 AVG 统计计算平均值
多表查询
一对多关系:从表使用主表的主建作为外键 1.主表中有的数据,从表中可以没有 2.主表必须有数据,才能向从表中添加数据 3.删除主表的数据,要先删除从表后,才能删除主表
交叉链接查询
select * from 表1,表2
内链接查询
在交叉连接的基础上,使用外键约束作为查询条件.
(1)隐式内连接
SELECT * FROM 表1 ,表2 WHERE 表1(从表).外键 = 表2(主表).主键;
(2)显示内连接(join...on)
SELECT * FROM 表1 JOIN 表2 ON 表1(从表).外键 = 表2(主表).主键;
注意:on后面可以继续使用where条件查询.
外连接查询
1.左外链接 select * from 表1 left join 表2 on 条件 #以表左边为主,若左边有数据,右边没有使用null代替,左边没有数据,右边也不能出现 2.右外链接 select * from 表1 right join 表2 on 条件
子查询
一条select语句结果作为另一条select语句的(查询条件,查询结果等) 查询条件:SELECT * FROM 表1 WHERE 列 = (SELECT 列 FROM 表1 [WHERE 条件])