建立數據庫前端
create database 數據庫名 [其餘選項];
建立數據庫表mysql
create table 表名稱(列聲明); ## 以建立 students 表爲例, 表中將存放 學號(id)、姓名(name)、性別(sex)、年齡(age)、聯繫電話(tel) 這些內容: create table students ( id int unsigned not null auto_increment primary key, name char(8) not null, sex char(4) not null, age tinyint unsigned not null, tel char(13) null default "-" );
插入數據 面試
insert [into] 表名 [(列名1, 列名2, 列名3, …)] values (值1, 值2, 值3, …); ##其中 [] 內的內容是可選的, 例如, 要給 samp_db 數據庫中的 students 表插入一條記錄, 執行語句: insert into students values(NULL, "王剛", "男", 20, "13811371377"); ##有時咱們只須要插入部分數據, 或者不按照列的順序進行插入, 可使用這樣的形式進行插入: insert into students (name, sex, age) values("孫麗華", "女", 21);
單表查詢sql
select 列名稱 from 表名稱 [查詢條件]; select 列名稱 from 表名稱 where 條件; ## 例如要查詢 students 表中全部學生的名字和年齡, 輸入語句 select name, age from students; 執行結果以下: mysql> select name as 姓名, age as 年齡 from students; +--------+-----+ | 姓名 | 年齡 | +--------+-----+ | 王剛 | 20 | | 孫麗華 | 21 | | 王永恆 | 23 | | 鄭俊傑 | 19 | | 陳芳 | 22 | | 張偉朋 | 21 | +--------+-----+ 6 rows in set (0.00 sec) ##查詢年齡在21歲以上的全部人信息: select * from students where age > 21; ##查詢名字中帶有 "王" 字的全部人信息: select * from students where name like "%王%"; ##查詢id小於5且年齡大於20的全部人信息: select * from students where id<5 and age>20; ##消除取值重複的行 select distinct Sno as 選修了課程的學生學號 from SC; ##肯定範圍,查詢IS系和CS系的全體學生姓名和性別 select Sname as 姓名,Sdept as 系別,Sage as 年齡 from student where Sage between 20 and 23; ##查詢IS系和CS系的全體學生姓名和性別 select Sname as 姓名,Ssex as 性別 from student where Sdept='IS' or Sdept='CS'; select Sname as 姓名,Ssex as 性別 from student where Sdept in ('IS','CS'); ##查詢既不屬於IS系,也不屬於MA系的學生姓名和年齡 select Sname as 姓名,Sage as 年齡 from student where Sdept !='IS'and Sdept!='CS'; select Sname as 姓名,Sage as 年齡 from student where Sdept not in('IS','MA'); ##涉及空值的查詢(is null) ##查詢沒有先修課的課程號和課程名 select Cno as 課程號,Cname as 課程名,Cpno from course where Cpno is null; ##查詢結果排序(order by ) ##查詢選修了3號課程的學生學號和成績,結果按成績降序/升序排列。 ##降序 Decending Order select Sno as 學號,Grade as 成績 from SC where Cno=3 order by Grade desc; ##升序 Ascending order select Sno as 學號,Grade as 成績 from SC where Cno=3 order by Grade asc; ##彙集函數 count、sum、avg、max、min ##查詢學生總數 select count(*) as 學生總數 from student; ##查詢全部課程的總學分 select sum(Ccredit) as 全部課程總學分 from course; ##查詢全體學平生均年齡 select avg(Sage) as 平均年齡 from student; ##查詢1號課程的最高分 select max(Grade) as 1號課程的最高分 from SC where Cno=1; ##分組統計(group by) ##查詢男女學生各有多少人 select Ssex as 性別,count(*) as 人數 from student group by Ssex; ##查詢每一個課程的課程號和平均分。 select Cno as 課程號,avg(Grade) as 平均分 from SC group by Cno;
having 關鍵字後面直接跟彙集函數
在 SQL 中增長 HAVING 子句緣由是,WHERE 關鍵字沒法與合計函數一塊兒使用。數據庫
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value
單表複雜實例:segmentfault
##查詢選修了2門課程以上(含2門,但不含1號課程),學生學號和選修課程數。 select Sno as 學號, count(course.Cno) as 選修課程數 From SC where course.Cno = SC.Cno and course.Cno != 1 Group by Sno Having Count(course.Cno)>=2; ##查詢不及格門數2門以上的學生學號。 select Sno as 學號 From SC Where sc.Grade < 60 Group by Sno Having count(Cno) > 2 ##查詢有2名以上(含2名)學生選修了的課程號和選修人數。 select Cno as 課程號, count(Sno) From SC Group by Cno Having count(Sno) >= 2
多表鏈接查詢函數
等值與非等值鏈接查詢:code
##查詢每一個學生及其的選修課程狀況 select student.Sno as 學號,course.Cno as 選修課號,SC.Grade as 成績 from student,course,SC where student.Sno=SC.Sno and course.Cno=SC.Cno ;
自身鏈接:排序
##查詢每一個學生的間接選修課 select SC.Sno as 學號, FIRST.Cname as 直接選修課, SECOND.Cname as 間接選修課 from SC, course as FIRST, course as SECOND where FIRST.Cno=SC.Cno and FIRST.Cpno=SECOND.Cno;
外鏈接rem
##查詢全部學生選修課程狀況(含沒選修課程的學生) select student.Sno as 學號, Sname as 姓名, sc.Cno as 選修課程號 from student LEFT OUTER JOIN SC ON student.Sno=SC.Sno;
JOIN 用於根據兩個或多個表中的列之間的關係,從這些表中查詢數據:
JOIN: 若是表中有至少一個匹配,則返回行
LEFT JOIN: 即便右表中沒有匹配,也從左表返回全部的行
RIGHT JOIN: 即便左表中沒有匹配,也從右表返回全部的行
FULL JOIN: 只要其中一個表中存在匹配,就返回行
注意:
UNION 操做符用於合併兩個或多個 SELECT 語句的結果集。
請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有類似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。
嵌套查詢
帶有IN謂詞的子查詢( 屬性 in (子查詢的查詢結果) )
##查詢與王敏同窗在同一個系的學生信息。 select * from student where Sdept in ( select Sdept from student where Sname='王敏' ); ##查詢不與王敏同窗不在同一個系的學生信息。 select * from student where Sdept not in ( select Sdept from student whereSname='王敏' ); ##查詢選修了課程名是「信息系統」的學生學號和姓名。 select student.Sno as 學號, Sname as 姓名 from student,SC where student.Sno=SC.Sno and Cno in ( select Cno from course where Cname='信息系統' ) ##查詢曾與劉晨一同上課的學生學號和姓名。(假設:一個課程只有一個上課班) select distinct student.Sno as 學號, Sname as 姓名 from student,SC where student.Sno=SC.Sno and Cno in ( select Cno from SC,student where SC.Sno=student.Sno and student.Sno in ( select Sno from student where student.Sname='劉晨' ) )
帶有比較運算符的子查詢(=,>=,<=,<>或!=)
##查詢與王敏同窗在同一個系的全部學生信息 (=判斷) select * from student where Sdept=( select Sdept from student where Sname='王敏' ) ##查詢每一個學生超過該課程最低分的課程號。(同類課程不是最低分的),子查詢的結果返回一個數的時候,這個子查詢就能夠當一個數用?可使用in符號,或者大於小於符號。 select Cno from SC a where Grade> ( select min(Grade) from SC b where a.Cno=b.Cno ) ##查詢每一個學生超過他選修課程平均成績的課程號。 select Cno from SC a where Grade> ( select avg(Grade) from SC b where a.Sno=b.Sno )
帶有ANY或ALL謂詞的子查詢:
ANY表示任何一個,ALL表示全部,能夠用在子查詢的括號前面
##查詢其餘系中比計算機系某一學生年齡小的學生姓名,性別、年齡和所在系。 select Sname as 姓名,Ssex as 性別, Sage as 年齡, Sdept as 所在系 from student where Sage <( select Sage from student where Sdept='CS' ); ##查詢其餘系中比計算機系全部年齡都小的學生姓名和年齡。 select Sname as 姓名, Sage as 年齡 from student where Sdept<>'CS' and Sage <ALL ( select Sage from student where Sdept='CS' );
帶有Exists謂詞的子查詢:
##查詢全部選修了1號課程的學生姓名。 select Sname as 姓名 from student where Exists ( select * from SC where Cno=1 and Sno=Student.Sno );
集合查詢
並 UNION
##查詢計算機系的學生及年齡不大於19歲的學生詳細信息。 select * from student where student.Sdept='CS' union select * from student where student.Sage<=19;
交 INTERSECT
##查詢選修了1號課程的與年齡不大於19歲的 學生 詳細信息 的交集。 Select * from student,SC where student.Sno=SC.Sno and SC.Cno=1 INTERSECT Select * from student where student.Sage<=19;
差 EXCEPT
##查詢計算機科學系的學生與年齡不大於19歲的學生詳細信息的差集。 select * from student where student.Sdept='SC' EXCEPT select * from student where student.Sage<=19;
更新數據
update 表名稱 set 列名稱=新值 where 更新條件; ##將id爲5的手機號改成默認的"-": update students set tel=default where id=5; ##將全部人的年齡增長1: update students set age=age+1; ##將手機號爲 13288097888 的姓名改成 "張偉鵬", 年齡改成 19: update students set name="張偉鵬", age=19 where tel="13288097888";
刪除數據
delete from 表名稱 where 刪除條件; ##刪除id爲2的行: delete from students where id=2; ##刪除全部年齡小於21歲的數據: delete from students where age<20; ##刪除表中的全部數據: delete from students;
修改建立後的表
alter table 語句用於建立後對錶的修改, 基礎用法以下:
添加列:
##基本形式: alter table 表名 add 列名 列數據類型 [after 插入位置]; ##在表的最後追加列 address: alter table students add address char(60); ##在名爲 age 的列後插入列 birthday: alter table students add birthday date after age;
修改列
##基本形式: alter table 表名 change 列名稱 列新名稱 新數據類型; ##將表 tel 列更名爲 telphone: alter table students change tel telphone char(13) default "-"; ##將 name 列的數據類型改成 char(16): alter table students change name name char(16) not null;
刪除列
##基本形式: alter table 表名 drop 列名稱; ##刪除 birthday 列: alter table students drop birthday;
重命名錶
##基本形式: alter table 表名 rename 新表名; ##重命名 students 表爲 workmates: alter table students rename workmates;
刪除整張表
##基本形式: drop table 表名; ##刪除 workmates 表: drop table workmates;
刪除整個數據庫
##基本形式: drop database 數據庫名; ##刪除 samp_db 數據庫: drop database samp_db;
推薦閱讀:
2019年前端面試題-01
2019年前端面試題-02
2019年前端面試題-03
2019年前端筆試題
我是Cloudy,年輕的前端攻城獅一枚,愛專研,愛技術,愛分享。
我的筆記,整理不易,感謝閱讀、點贊和收藏。
文章有任何問題歡迎你們指出,也歡迎你們一塊兒交流前端各類問題!