select
列名列表
from
表名列表
where....
笛卡尔积:
有两个集合A,B。取这两个集合的所有情况
要完成多表查询,需要消除无用的数据
2.多表查询的分类:
1.内连接查询:
1)隐式内连接:使用where条件消除无用数据
SELECT
t1.`name`,
t1.`gender`,
t2.`name`
FROM
emp t1,
dept t2
WHERE
t1.`dept_id` = t2.`id`;
2)显式内连接:
语法:select 字段列表 from 表名1 inner join 表名2 on 条件
SELECT
t1.`name`,
t1.`gender`,
t2.`name`
FROM
emp t1
[INNER] JOIN
dept t2
ON
t1.`dept_id` = t2.`id`;
2.外连接查询:
1.左外连接:
语法:select 字段列表 from 表1 left [outer] join 表2 on条件
查询的是左表所有数据以及其交集部分
2.右外连接:
语法:select 字段列表 from 表1 right [outer] join 表2 on条件
查询的是右表所有数据以及其交集部分
3.子查询
概念:查询中嵌套查询,称嵌套查询为子查询
子查询不同情况:
1.子查询的结果是单行单列的
子查询可以作为条件,使用运算符去判断(>,>=,<,<=,=)
查询员工工资小于平均工资的人
SELECT * FROM emp WHERE emp.`salary` < (SELECT AVG(salary) FROM emp);
2.子查询的结果是多行单列的
子查询可以作为条件,使用运算符in来判断
查询'财务部'和'市场部'所有的员工信息
SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部');
3.子查询的结果是多行多列的
子查询可以作为一张虚拟表
查询员工入职日期是2011-11-11日之后的员工信息和部门信息
SELECT * FROM (SELECT * FROM emp WHERE emp.`join_date` > '2011-11-11') t1 ,dept t2 WHERE t1.dept_id = t2.`id`;
1.添加用户
语法:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
2.删除用户
语法:DROP USER '用户名'@'主机名';
3.修改用户密码
语法:UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';
SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
mysql中忘记了root用户的密码
1.cmd --> net stop mysql 停止mysql服务
需要管理员运行该cmd
2.使用无验证方式启动mysql服务:mysqld --skip-grant-tables
3.打开新的cmd窗口(原来的不关闭),直接输入mysql命令,敲回车。就可以登录成功
4.use mysql
5.update user set password = password('新密码') where user = 'root';
6.关闭两个窗口
7.打开任务管理器,手动结束mysql.exe的进程
8.启动mysql服务
9.使用新密码登录
4.查询用户
1.切换到mysql数据库
use mysql
2.查询user表
select * from user;
通配符:% 表示可以在任意主机使用用户登录数据库
2.授权
1.查询权限:
SHOW GRANTS FOR '用户名'@'主机名'
2.授予权限:
grant 权限列表 on 数据库名。表名 to '用户名'@'主机名';
3.撤销权限:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';