Mysql加强

Mysql加强

1. 多表查询

1.1 笛卡尔积

​ 没有连接条件的表关系返回的结果(表之间数据组合的结果)。
​ 注意:连接 n张表,至少需要 n-1个连接条件

1.2 外键约束

​ 主键约束(PRIMARY KEY): 约束在当前表中,指定列的值非空且唯一。
​ 外键约束(FOREIGN KEY): A表中的外键列. A表中的外键列的值必须参照于B表中的某一列(B表主键)。

1.3 内连接查询

1.3.1 显示内连接

SELECT <selectList> FROM A [INNER] JOIN B ON A.列 = B.列

1.3.2 隐式内连接

SELECT <selectList> FROM A ,B WHERE A.列 = B.列
  • 在做等值连接的时候,若A表中和B表中的列名相对. 则可以简写:
SELECT   <selectList>
FROM A [INNER] JOIN B USING(**同名的列)**
前提:在emp和dept表中都有deptno列. 并且是外键关系。
如: SELECT * FROM emp JOIN dept USING (deptno)

1.4 外连接查询

  • 左外连接:查询出JOIN左边表的全部数据查询出来,JOIN右边的表不匹配的数据使用NULL来填充数据。
  • 右外连接:查询出JOIN右边表的全部数据查询出来,JOIN左边的表不匹配的数据使用NULL来填充数据。
SELECT 
	<selectList> 
FROM 
	A 
	LEFT/RIGHT OUTER JOIN B ON 
	(A.column_name = B.column_name);

1.5 自连接查询

​ 自连接查询:把一张表看成两张来做查询,一定要取别名。

1.6 子查询

​ 一个查询语句嵌套在另一个查询语句中,内层查询的结果可以作为外层查询条件。一般嵌套在WHERE或者FROM字句中。

  • 单行单列子查询:
-- 需求: 查询零售价比罗技MX1100更高的所有商品信息。
SELECT * FROM product
WHERE salePrice > (
	SELECT salePrice FROM product WHERE productName = '罗技MX1100'
)
  • 单行多列子查询
-- 需求: 查询分类编号和折扣与罗技M100相同的所有商品信息。
SELECT * FROM product
WHERE (dir_id,cutoff)=(
	SELECT dir_id,cutoff FROM product WHERE productName = '罗技M100'
)

2. 数据操作(DML)

2.1 插入数据

1.插入完整数据记录
INSERT INTO	table_name (column1,column2,column3...)VALUES	(value1,value2,value3...);
2.插入数据记录一部分
INSERT INTO	table_name VALUES	(value1,value2,value3...);
3.插入多条数据记录(MySQL特有)
INSERT INTO	table_name (column1,column2,column3...)
   VALUES (value1,value2,value3...),
          (value1,value2,value3...),
          (value1,value2,value3...)..;
4.插入查询结果
 INSERT INTO	table_name (column1,column2,column3...)
     SELECT (column1,column2,column3...)
     FROM table_name 

2.2 修改数据

UPDATE	table_name
SET	columnName = value [, columnName = value] …
[WHERE	condition];
如果省略了where子句,则全表的数据都会被修改。注意:没有FROM

2.3 删除数据

DELETE FROM tablename [WHERE condition];
如果省略了where子句,则全表的数据都会被删除

3. 数据库的备份与恢复

  • 导出:
mysqldump -u账户 -p密码 数据库名称>脚本文件存储地
mysqldump -uroot -padmin jdbcdemo> C:/shop_bak.sql
  • 导入:
mysql -u账户 -p密码 数据库名称< 脚本文件存储地址
mysql -uroot -padmin jdbcdemo< C:/shop_bak.sql

4. 函数

  • cast函数
cast(值 as 类型)
cast('123' as SIGNED) 将123转换为int类型,返回值为整型类型
  • convert函数
convert('123',SIGNED)
可以转换的类型有限制:
	二进制,同带binary前缀的效果 : BINARY    
    字符型,可带参数 : CHAR()     
    日期 : DATE     
    时间: TIME     
    日期时间型 : DATETIME     
    浮点数 : DECIMAL      
    整数 : SIGNED     
	无符号整数 : UNSIGNED
  • decimal类型
column decimal(P,D)
P是表示有效数字数的精度。 P范围为1〜65。
D是表示小数点后的位数。 D的范围是0~30。
  • ifnull函数
IFNULL(expression_1,expression_2);
如果expression_1不为NULL,则IFNULL函数返回expression_1; 否则返回expression_2的结果。

5. 索引

​ 索引是创建表在表上,是对数据库表中一列或者多列的值进行排序的一种结构。索引可以提高检索的速度。缺点创建和维护索引会耗费内存、时间,索引需要占用物理空间,影响数据插入的速度(解决办法是:先删除表中的索引,然后插入数据,插入数据完成后再创建索引)。

创建索引的语法:
-- 在studnet表的age字段上添加索引,此索引按照从小到大的顺序排列。
CREATE INDEX index_age ON student(age ASC);

6. 视图

​ 视图是一种虚拟的表,是从一个或者多个表中导出来的数据。数据库中只存放了视图的定义,没有存放视图中的数据。这些数据还是存放在原来的表中。因此,视图中的数据依赖于原来的表中的数据。

创建视图的语法:
-- 创建一个视图,包括studnet的姓名和年龄
CREATE VIEW student_view AS SELECT name,age from student; 

7.数据库三大范式

  • 第一范式:要求表的每个字段必须是独立的不可分割的单元(数据库表的每一列都是不可分割的原子数据项)。

  • 第二范式:在第一范式的基础上,要求表的除主键以外的字段都和主键有依赖关系的(属性完全依赖于主键)。

  • 第三范式:在第二范式的基础上,要求表的除主键以外的字段只能和主键有直接决定的依赖关系(任何非主属性不依赖于其它非主属性)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章