這是2018.1.8 22:24的更新筆記 start:
(這裏的筆記有誤被刪除)
這是2018.1.8 22:24的更新筆記 end:
-- 多列組合外鍵,必須用表級約束的方法
-- 自關聯,自引用(一般用與,需要查詢多個相同的列名的情況下)
create table tree
(id int auto_increment PRIMARY key,
name1 varchar(20),
parent_id int,
FOREIGN key(parent_id) references tree(id)
)
–級聯刪除:刪除主表的數據,關聯的從表數據也刪除,則需要在建立外鍵約束的後面增加on delete cascade 或on delete set null,前者是級聯刪除,後者是將從表的關聯列的值設置爲null。
-- 增加 on delete cascade 或 on delete set null,前者是級聯刪除,後者是將從表關聯
-- 的列的值設置爲null;
create table student4
(id int auto_increment primary key,
name4 varchar(8),
classes_name varchar(20),
classes_number int,
foreign key(classes_name,classes_nunber) references classes1(name1,number) on delete cascade
)
-- check 檢查約束,無效果,mysql版本不支持;
create table mm
(id int auto_increment primary key,
name1 varchar(8),
aeg int,
check(age>20)
)
– 修改列
-- 增加add列名
-- 1)alter table 表 add 列 列的類型 列的參數
alter table mm add username char(20) not null DEFAULT ''
-- 2)alter table 表 add 列 列的類型 列的參數 after 某列(把新列加某列後面)
alter table mm add username char(20) not null DEFAULT '' after username
-- 3)alter table 表 add 列 列的類型 列的參數 after 某列(把新列加在最前面)
alter table mm add username char(20) not null DEFAULT '' firstj
– 分組
-- having 一般和group by連用,在結果組後再來設置條件
select ssex as '性別',count(*)
from student
group by ssex
HAVING ssex='男'
-- 查詢選修了三門課以上的學生的學號
-- 一定不能是 * ,而是某一個列或者某個列的聚合函數,
-- 順序:where
-- GROUP BY
-- HAVING
-- ----------------------------------
select語句的執行順序:
FROM
-- ON
-- JOIN
WHERE -- where的優先級優於聚集函數;
GROUP BY
-- WITH CUBE or WITH ROLLUP
HAVING -- 聚集函數優於having先執行;
SELECT
DISTINCT
ORDER BY
limit
---------------------------------
select * from sc
select sno,count(*)
from sc
group by sno
having count(cno)>3
-- inner join 是比較運算符,只返回符合條件的行。
-- 當在查詢之中,不同的表中有了相同字段名稱的時候,訪問這些字段必須加上表名稱,即“表.字段”
--------------------------------------------------
– 多表連接查詢
select student.*,sc.*
from student,sc
where student.sno=sc.sno
-- 等同於
select student.*,sc.*
from student INNER JOIN sc ON student.sno=sc.sno -- 條件用on引出
當有多個內連接時,執行順序是從前往後執行的;