1、多表查询
查询两个或两个以上的表
1、笛卡尔积(在实际查询中要避免笛卡尔积)
假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)};就是所有集合之间的组合
消除笛卡尔积需要通过WHERE的有效条件
2、内连接:没有对应关系的就不会显示
隐式内连接:SELECT 查询内容 FROM 表1,表2 WHERE 消除笛卡尔积的条件;
显示内连接:SELECT 查询内容 FROM 表1 [INNER] JOIN 表2 ON 消除笛卡尔积的条件;
3、外连接
左外连接:左边表的内容均会显示
SELECT <selectList>
FROM A LEFT JOIN B
ON A.column_name = B.column_name;
右外连接:右边表的内容均会显示
SELECT <selectList>
FROM A RIGHT JOIN B
ON A.column_name = B.column_name;
4、子查询:在SELECT查询语句中还WHERE之后的条件是不确定的,还是由一个SELECT查询语句构成
需求:查询零售价比罗技MX1100更高的所有商品信息:
SELECT * FROM product WHERE salePrice > (SELECT salePrice FROM product WHERE productName = '罗技MX1100')
5、自连接;把一张表看成两张来做查询,一定要取别名。自连接实际上也属于子查询
/*查询表中所有员工以及所在部门的经理姓名*/
SELECT emp.id,emp.name,manager.name 主公
FROM employee2 emp
LEFT JOIN employee2 manager ON emp.manager_id = manager.id
2、数据操作(增删改)
1、插入数据
INSERT INTO 表名 (列名,列名,...) VALUES (值,值,...);
INSERT INTO 表名 (列名,列名,...) VALUES (值,值,...),(值,值,...);
注意:一般不会添加主键。
2、修改数据
UPDATE 表名 SET 列名=值,列名=值,... WHERE ....
注意:一般都需要加上WHERE条件,否则全表的数据都会被修改。
3、删除数据
DELETE FROM 表名 WHERE ....
注意:如果省略了where子句,则全表的数据都会被删除
3、MySQL函数
1、聚集函数
COUNT:统计结果记录数,如果列的值为NULL,不会计算在内的,即会忽略NULL值
MAX: 统计计算最大值
MIN: 统计计算最小值
SUM: 统计计算求和
AVG: 统计计算平均值,如果列的值为NULL,不会计算在内的,即会忽略NULL值
2、类型准换函数
CAST(value AS type), CONVERT(value, type) :用来获取一个类型的值,并产生另一个类型的值;
(1)SELECT CAST('123abc' AS signed) + 1; --> 124
(2)SELECT CONVERT('123abc', signed) + 2; --> 125
3、字符串函数
concat():拼接
lenght() : 长度
upper() :转大写
lower() :转小写
trim() : 去空格
4、日期函数
now() 当前日期(年月日 时分秒)
CURDATE() : 当前日期(年月日)
5、控制流程函数
if(test,val1,val2) ------>类似于三目运算, test : 判断条件 判断条件为true,返回 val1 判断条件为false, 返回 val2
ifnull(val1,val2) -------->val1不为空,返回val1 val1为空,返回val2
4、数据备份于恢复
1、在dos命令行窗口进行,若操作系统版本高,则使用管理员模式
备份:mysqldump -u数据库名 -p密码 表名字>绝对地址
恢复:mysqldump -u数据库名 -p密码 表名字<绝对地址
2、使用可视化工具,存储sql文件/运行sql文件