MySQL數據庫基礎(數據表的SELECT操作)


本篇是延續上一篇文章的內容,依舊是關於數據表操作方面的內容,這方面內容相對較多,畢竟操作數據表纔是學習數據庫的核心。

數據表的操作

1、創建成績表

--創建成績表
CREATE TABLE ExamResult(

   id INT PRIMARY KEY  auto_increment,
   name VARCHAR (20),
   JavaScript DOUBLE ,
   jQuery DOUBLE ,
   C_language DOUBLE
);

--添加數據到表中
INSERT INTO ExamResult VALUES  (1,"Luffy",98,98,98),
                               (2,"Nami",35,98,67),
                               (3,"Zoro",59,59,62),
                               (4,"Chopper",88,89,82),
                               (5,"ViewIn",88,98,67),
                               (6,"ZaHuw",86,100,55);

1

2、select表達式

  • select查詢:SELECT *|field1,filed2 … FROM tab_name
  • where篩選:WHERE 條件
  • 分組:GROUP BY field
  • having過濾:HAVING 篩選
  • 排序:ORDER BY field
  • 限制個數:LIMIT 限制條數
    注意:
    select只是一個顯示效果,不會真正去除或者刪除數據庫中的數據

3、查詢

其中from指定從哪張表篩選,*表示查找所有列,也可以指定一個列;
distinct用來剔除重複行。

--只查所有名字
select name from ExamResult;

--看名字和JavaScript的成績
select name, JavaScript from ExamResult;

--去除重複的內容:去除所有重複的的name,只留一個
select distinct name from ExamResult;

2

4、修改(AS)

UPDATE語法可以用新值更新原有錶行中的各列。
SET子句指示要修改哪些列和要給予哪些值。

--修改數據來顯示:將成績分別加10,20,30
select name, JavaScript+10, jQuery+20, C_language+30 FROM ExamResult;

--用as來修改顯示:修改name和科目名稱
select name as "NAME", JavaScript as JS, jQuery as JQ, C_language as CC from ExamResult;

3

5、篩選(WHERE)

WHERE子句指定應更新哪些行。如沒有WHERE子句,則更新所有的行。

  • 多個條件邏輯運算符:and or not
    關係運算:> < >=(大等於) <=(小等於) !=(不等於)
    in運算:表示在某些數據中任選一個
    like運算:以某字符開頭的字段
--篩選語句:
--將JS成績大於85的name和JS成績顯示出來
SELECT name, JavaScript from examresult where JavaScript>85;

--篩選JS成績在70到100之間的name和JS成績
SELECT name, JavaScript from ExamResult where JavaScript between 70 and 100;

--篩選JS成績不是88的name和JS成績
select name, JavaScript from ExamResult where JavaScript!=88;

--篩選JS成績是88和98的name和JS成績
select name, JavaScript from ExamResult where JavaScript in(88,98);

--篩選name是z開頭的name與JS成績
select name, JavaScript from examresult where name like "z%";


--只添加名字,不添加成績
insert into ExamResult (name) values ( "new_one" );
--刪除JS成績爲空的name
select name from ExamResult where JavaScript is null;

4

6、排序(ORDER)

--排序(默認升序):按照JS成績高低排序
select name, JavaScript from ExamResult order by JavaScript;

--過濾之後再排序(desc降序):JS成績大於70的name按JS成績從低到高排序
select name, JavaScript from ExamResult where JavaScript>70 order by JavaScript desc;

--對總分進行排序:總成績從高到低排序
SELECT name, JavaScript+jQuery+C_language as SUM from ExamResult order by SUM desc;

--精確定位:對name爲ZaHuw且JS成績在50分以上的總成績進行從高到低排序
SELECT name, JavaScript+jQuery+C_language as SUM from ExamResult where name="ZaHuw" and JavaScript>=50 order by SUM desc;

5

7、分組(GROUP)

--按照name來分組,實際上就是分成了6組,同一個名字爲一組
select * from ExamResult group by name;

--按照JS成績來分,同一個成績爲一組
select * from ExamResult group by JavaScript;

--分組之後進行操作(函數):通過name分組之後對每一組的JS成績進行求和操作
select name, sum(JavaScript) from ExamResult group by name;

這是原數據表:
6
分組求和過後的表:
7

8、過濾(HAVING)

having和where的區別:
having對分組過後的數據進行過濾(而where是分組之前的),不過能用where的地方都可以用having替換

--用name分組過後,求每一組jquery的成績總和,最後篩選jQuery成績總和大於150的成績對應的name
select name, sum(jQuery) from ExamResult group by name having sum(jQuery)>150;

--統計JS成績大於80的name的個數
select count(name) from ExamResult where JavaScript>80;

--計算所有name的JS平均分:JavaScript總分/name個數
select sum(JavaScript)/count(name) from ExamResult;

8

9、聚合函數

--簡單化的求平均分:AVG
select AVG(JavaScript) FROM ExamResult;

--最大值:MAX
select MAX(JavaScript) from ExamResult;

--最小值:MIN,排除null用ifnull(JavaScript,0),意思是如果JS成績是null,則當做0
select MIN(ifnull(JavaScript,0)) FROM ExamResult;

--求總成績的最大值
select MAX(JavaScript+jQuery+C_language) from ExamResult;

--求分組過後總成績的最大值和組名
select name, MAX(JavaScript+jQuery+C_language) from ExamResult group by name;

9

10、限制取值(LIMIT)

--只取id排序前三的數據
select * from ExamResult limit 3;

--從第二個開始,取5個(類似索引一樣,從0開始算的)
select * from ExamResult limit 1,4;

10
本篇結束,謝謝大家!
所有select的基本操作都介紹完了,不過學習這種事情主要還是需要自己去練習,得出結果才印象深刻,效果纔好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章