1.SQL数据定义语言(基础)
生活随笔
收集整理的這篇文章主要介紹了
1.SQL数据定义语言(基础)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.創建數據庫
- CREATE Database database_name;
- 習慣Sql語句中,保留的關鍵字否設置為大寫,數據庫、表、字段為小寫。?
2.創建數據表
- 創建數據表基本語法
- CREATE TABLE 表名(列名1 類型 [NOT NULL,UNIQUE,DEFAULT value,PRIMARY KEY,CONSTRAINT foregin_name foregin key(column) references outer_table_name(column) on Delete RESTRICT|CASCADE|SET NULL] );
- 說明
- 1.中括號中的內容為可選項目
- 2.常用的列數據類型有 INT、SMALLINT、FLOAT、DATE、DATETIME、VARCHAR(n)、CHAR(n)等
- 3.NOT NULL 設置值不能為NULL、UNIQUE設置值不能重復
- 4.PRIMARY KEY設置為主鍵 只有外鍵可以設置為auto_increment
- 5.CONSTRAINT外建名 references outer_table_name(列值) on Delete|Update RESTRICT|CASCADE|SET NULL] 設置外鍵 restrict主表中數據不能刪除數據、CASCADE主表中被刪除那么引用為外鍵值對的表格也刪除、主表中的數據被刪除那么引用為外鍵的表的數據設置為NULL
- 舉例--mysql測試
- 1.student表 CREATE TABLE student(SNO CHAR(7) PRIMARY KEY,SNAME VARCHAR(8) NOT NULL,SEX CHAR(2) NOT NULL,BDATE DATE NOT NULL,HEIGHT DEC(5,2) DEFAULT 000.00);?
- 2.SCOURSE表
- CREATE TABLE SCOURSE(CNO CHAR(6) PRIMARY KEY,LHOUR SMALLINT NOT NULL,CREDIT DEC(1,0) NOT NULL,SEMESTER CHAR(2) NOT NULL);?
- 3.SC表---添加外鍵
- CREATE TABLE sc(SNO CHAR(7) NOT NULL,constraint SNO_foregin_key foreign key(SNO) references student(SNO) ON delete cascade,CNO CHAR(7) not NULL,constraint cno_foreign_key foreign key(CNO) references scource(cno) on delete restrict, grade dec(4,1) DEFAULT null);
3.修改表的結構
- a.添加新列------ADD
- alter table_name add 列名 類型 ?
- b.修改列字段類型----modify
- alter table_name modify 列名 類型
- c.修改列的名稱或者屬性-----change
- alter table_name?change name1 name2 類型
- d.添加主鍵------add primary key(column);
- alter table_name add primary key(column);
- alter table table_name drop primary key;//刪除主鍵 注意:如果此列被設置為外建 on delete restrict,那么只有刪除了外鍵之后才能刪除主鍵
- e.添加其他屬性-------add unique(column)
- alter table_name add unique(column)
- g.重命名表名--------rename
- alter table_name rename table_name table_name_new
- h.外鍵設置------外建引用的列值必須唯一
- alter table_name add constrints foreign_name foreign key(column) references outer_table(column) on delete set null;
- alter table_name drop foreign key foreign_name;//刪除外鍵
- 索引設置—后續
- alter table_name add index index_name(column)
- alter table_name drop index index_name;//刪除索引
4.MYSQL索引
- MYSQL索引----加快查詢速度
- MySQL中,所有的數據類型都可以被索引。
- MySQL的索引包括普通索引、唯一性索引、全文索引、單列索引、多列索引等。
- 缺點:
- 1.創建和維護索引需要消耗時間
- 2.索引需要占用物理空間
- 索引的分類
- 普通索引— 沒有任何約束條件的索引
- 唯一索引— Unique(索引對應的值不能重復)
- 全文索引—FullText(只能創建在CHAR、VARCHAR、TEXT)
- 單列索引—索引對應一列值
- 多列索引—索引對應多列值
- 創建索引
- 1.創建表的時候設置索引
- 格式[UNIQUE | FULLTEXT | SPATIAL ] INDEX index_name (column [length長度] [ASC|DESC]);
-
- a.普通索引 index index_name(id)?
- create table score(id int(11)?primary Key not?null, index id_index(id));//這里其實是多余的,主鍵上自動會添加索引
- b.唯一索引
-
- unique index index_name (column desc);
- c.全文索引
-
- FullText index index)name(info desc);
- d.單列索引
-
- Index index_name(tel(20));//tel 為varchar類型
- e.多列索引
-
- Index index_name(column1,column2);
- 多列索引生效的條件是什么?
- 查詢條件包含column1
- eg:alter table table_name add index index_name(column1,column2);
- select * from table_name where column2="value";//索引是不會起作用的
- a.普通索引 index index_name(id)?
-
- 2.已經創建的表格添加索引
-
- create [Unique|FULLTEXT|SPATIAL] Index index_name on table_name(column ?length?desc);
- e.g.:create unique Index id_index on studentInfo(id);//id字段添加了自動索引
-
- 3.修改表的結構并添加索引
-
- Alter table table_name add [unique|fulltext] index index_name(column desc);
-
- 4.刪除索引
-
- ALTER Table table_name drop Index index_name;
-
- 5.查看添加的索引
-
- show create table table_name;
-
5.SELECT語句
-
?5.1 表格數據
- 表1.course表
- 表2.student
- 表3.sc
-
5.2 查詢語句聯系
- Q1:查詢秋季學期有一門以上得分90以上的學生的名字
- a.SELECT sname from student WHERE sno in (SELECT sno from sc WHERE grade>90 and cno in (SELECT cno from course WHERE semester="秋"));
- b.SELECT sname? FROM student JOIN sc USING(`SNO`) JOIN course USING(cno) WHERE `SEMESTER`="秋" and grade>90;
- Q2:查詢只有一個人選修的課程號
- a.SELECT cno from (SELECT cno,count(*) as count from sc GROUP BY `CNO`)a WHERE count=1;//from后的子查詢必須添加別名
- select CNO from sc group by CNO having count(*)=1;
- b.SELECT `CNO` FROM sc WHERE cno not in (SELECT sc1.cno from sc as sc1,sc as sc2 WHERE sc1.sno!=sc2.`SNO` and sc1.cno=sc2.cno);
- c.SELCT cno from sc as scx where cno not in (select cno from sc where sno!=scx.sno);//關聯字查詢
- Q3:查詢選修EE-1的學生的姓名
- a.SELECT sname FROM student WHERE `SNO` IN (SELECT `SNO` from sc WHERE cno="EE-1");
- b.select sname FROM student,sc WHERE student.`SNO`=sc.`SNO` and `CNO`="EE-1";//鏈接
- c.SELECT `SNAME` FROM student? WHERE EXISTS (SELECT * from sc where sc.sno=student.`SNO`AND cno="EE-1");//使用Exists
- Q4:查詢學生的平均身高
- SELECT AVG(`HEIGHT`) FROM student;
- Q5:查詢缺成績的學生名和課程號
- SELECT sname,cno FROM student JOIN sc USING(`SNO`) WHERE grade IS NULL;
-
5.3 Group BY 和Order by的使用
- Q1:查詢CS開頭的課程的平均成績,最大成績,最小成績,除去成績有NULL的科目,最終結果按照課程名進行排序
- SELECT cno,MAX(grade),MIN(grade),avg(grade) FROM sc WHERE `CNO` LIKE "CS%" GROUP BY `CNO` HAVING `CNO` IN (SELECT `CNO` FROM sc WHERE grade is not NULL) ORDER BY `CNO` ASC;
- 注意HAVING的條件
-
5.4 Union的使用
- 合并查詢UNION—合并集合查詢的結果(一般是同一列)
- 關鍵字
-
- 1.UNION ? ? ??——合并結果并去重
- 2.UNION ALL——簡單的合并結果
-
- Q1:查詢1983年出生的學生和選修EE專業的學生的學號
- ?SELECT sno from student WHERE year(`BDATE`)="1983" UNION SELECT `SNO` FROM sc WHERE cno?like "EE%";
6.Insert、update、Delete語句?
-
6.1 Insert語句
-
Insert into table(column1,coliumn2) values(values1,values2);
-
6.2 Update語句
-
update table_name set column=value where 條件
-
6.3 Delete語句?
-
delete from table_name where 條件
?
?
轉載于:https://www.cnblogs.com/yangyunnb/p/6407044.html
總結
以上是生活随笔為你收集整理的1.SQL数据定义语言(基础)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MVC日期和其它字符串格式化
- 下一篇: 切换cmd的目录