MySQL數據庫SQL小結

  1. 建立數據庫前端

    create database 數據庫名 [其餘選項];
  2. 建立數據庫表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 "-"
        );
  3. 插入數據 面試

    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);
  4. 單表查詢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
  5. 多表鏈接查詢函數

    等值與非等值鏈接查詢: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 語句中的列的順序必須相同。
  6. 嵌套查詢
    帶有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
    );
  7. 集合查詢
    並 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;
  8. 更新數據

    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";
  9. 刪除數據

    delete from 表名稱 where 刪除條件;
    
    ##刪除id爲2的行: 
    delete from students where id=2;
    
    ##刪除全部年齡小於21歲的數據: 
    delete from students where age<20;
    
    ##刪除表中的全部數據: 
    delete from students;
  10. 修改建立後的表

    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;
  11. 刪除整張表

    ##基本形式: 
    drop table 表名;
    
    ##刪除 workmates 表: 
    drop table workmates;
  12. 刪除整個數據庫

    ##基本形式: 
    drop database 數據庫名;
    
    ##刪除 samp_db 數據庫: 
    drop database samp_db;

推薦閱讀:
2019年前端面試題-01
2019年前端面試題-02
2019年前端面試題-03
2019年前端筆試題


我是Cloudy,年輕的前端攻城獅一枚,愛專研,愛技術,愛分享。
我的筆記,整理不易,感謝閱讀、點贊和收藏。
文章有任何問題歡迎你們指出,也歡迎你們一塊兒交流前端各類問題!
相關文章
相關標籤/搜索