MySQL基础回顾DayTwo

75 阅读3分钟

练习命令语句和python的控制代码
5 多表查询
1基于两个表或者两个视图的查询,实际使用中,查询单个表不满足使用要求
– 显示雇员名雇员工资和所在部门的名字
这里使用了笛卡尔积,即先让两个表形成笛卡尔积,得到所有情况的组合,再对笛卡尔积进行条件筛选,以得到正确结果麻痹如只有部门号是对应的一致的一条信息才是正确的组合
select ename,sal, loc from emp, dept where emp.deptno=dept.deptno;

  • 如果两个表都有相同的字段名则需要到表名或者别名,使用了别名,部分数据库要求不能使用原名
    select ename, sal, loc, emp.deptno , d.deptno from emp , dept d where emp.deptno = d.deptno;
    – 显示某个员工的上级名字
    – 对自己这个表做笛卡尔积 内连接
    select worker.ename ,boss.ename from emp worker,emp boss where worker.mgr = boss.empno;
    左右外连接

2子查询 使用= 和in的查询
对于本身,则进行一下排除
嵌入在其他sql语句中的查询
单行子查询 子查询只返回一行的查询,如部门号是一个
– 如何显示与CAT一个部门的员工
select * from emp where deptno= (
select deptno from emp where ename=“CAT”
);

多行子查询 子查询返回多行,如部门号是10的人,是多个人
– xianshi 部门号为10的员工名字和工资
select * from emp where deptno in(
select deptno from emp where deptno=10
);
在from中使用子查询
把查询的内容当做一个表来对待
– 显示高于部门平均工资的员工
select emp.ename from emp ,(select avg(sal) myavg,deptno from emp group by deptno) tem where emp.sal > tem.myavg and emp.deptno= tem.deptno;

显示前四个入职的人
top或者limit并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。
SELECT column_name(s)
FROM table_name
LIMIT number;

建立临时表,可以用它来存放数据,之后你可以delete 原表中的内容,然后insert into 临时表中的内容,已完成对表的修改

MySql不支持SQL SELECT INTO 这一语法

SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename

可以用下面的方式替代:

CREATE TEMPORARY TABLE tmp_table(
SELECT
id,
name
FROM
tb_user
);
临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。
当然也可以在连接的时候手动删除表并释放空间:
DROP TABLE tmp_table;

左外连接和右外连接
显示每个员工和他的老板的名字,要求没有上级的也显示,
左外连接指左边的表的所有记录全部显示,如果没有匹配则用null来填充
from 表1left jion 表2 on条件
selectw.ename,b.ename from emp w left join emp b on w.mgr = b.empno

6维护数据完整性
约束 包括 primary key
foreign key
check 检查值在一个范围
unique
not null
default

check 的用法不常用
注意语法

www.runoob.com/sql/sql-che…
CREATE TABLE Persons
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如需命名 CHECK 约束,并定义多个列的 CHECK 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND City=‘Sandnes’)
)

ALTER TABLE 时的 SQL CHECK 约束
当表已被创建时,如需在 “P_Id” 列创建 CHECK 约束,请使用下面的 SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD CHECK (P_Id>0)
如需命名 CHECK 约束,并定义多个列的 CHECK 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City=‘Sandnes’)
7修改表和约束使用
alter命令
删除,添加或修改表字段
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT;

修改字段类型及名称
ALTER TABLE testalter_tbl MODIFY c CHAR(10);

ALTER TABLE 对 Null 值和默认值的影响
ALTER TABLE testalter_tbl
-> MODIFY j BIGINT NOT NULL DEFAULT 100;

修改字段默认值
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;

修改表名
ALTER TABLE testalter_tbl RENAME TO alter_tbl;