SQL 資料庫基本語法介紹

Share This Post

本次實作以 Mysql 實作

基本語法

創建資料庫、表

首先使用SQL語法創建,或者直接運用資料庫創建

創建資料庫使用 CREATE,COLLATE collation_name 指定資料庫的預設定序,這邊使用 utf8_general_ci 處理中文字排序。

創建資料庫:

CREATE DATABASE 資料庫名稱 
COLLATE 編碼;

創建資料表:

創建資料表(這邊建立三個欄位 name、age 和 gender,其後面為該欄位的屬性設定,例如資料型別、長度、是否允許 NULL 值、default 值等),一個資料庫中可以有多張資料表。

CREATE TABLE 資料表名稱 (
    欄位名稱 欄位屬性
);

users 資料表

CREATE TABLE users  (
  id int PRIMARY KEY,
  name varchar(255) NOT NULL,
  age int NULL,
  gender char(10) NULL,
  class_Id int ,
);

class 資料表

CREATE TABLE class (
    id int  PRIMARY KEY,
    classname VARCHAR(12) NOT NULL,
    age INTEGER,
    gender VARCHAR(6)
);

新增資料欄位

INSERT INTO student ( student_id, NAME, science_score, math_score, english_score )
VALUES
    ( 001, '小明', 60, 70, 80 ),
    ( 002, '小黃', 80, 90, 80 ),
    ( 003, '小紅', 50, 20, 30 ),
    ( 004, '小黑', 20, 30, 100 ),
    ( 005, '小橘', 93, 53, 64 );

讀取資料表

  • 我們並不一定每一次都要將表格內的資料都完全抓出。在許多時候,我們會需要選擇性地抓資料。 就我們的例子來說,我們可能只要抓出營業額超過 $1,000 的資料。要做到這一點,我們就需要用到 WHERE 這個指令。這個指令的語法如下:
SELECT "欄位名" FROM "表格名";

WHERE

  • 我們並不一定每一次都要將表格內的資料都完全抓出。在許多時候,我們會需要選擇性地抓資料。 就我們的例子來說,我們可能只要抓出營業額超過 $1,000 的資料。要做到這一點,我們就需要用到 WHERE 這個指令。這個指令的語法如下:
SELECT "欄位名"
FROM "表格名"
WHERE "條件"; 

// SELECT * FROM student WHERE science_score > 50

AND/OR

  • 我們看到 WHERE 指令可以被用來由表格中有條件地選取資料。 這個條件可能是簡單的 ,也可能是複雜的。複雜條件是由二或多個簡單條件透過 AND 或是 OR 的連接而成。一個 SQL 語句中可以有無限多個簡單條件的存在。
SELECT "欄位名"
FROM "表格名"
WHERE "簡單條件"
{[AND|OR] "簡單條件"}+;

ORDER BY

SELECT "欄位名"
FROM "表格名"
[WHERE "條件"]
ORDER BY "欄位名" [ASC, DESC];

GROUP BY

SELECT "欄位名"
FROM "表格名"
[WHERE "條件"]
GROUP BY "欄位名" [ASC, DESC];

HAVING

SELECT "欄位1", SUM("欄位2")
FROM "表格名"
GROUP BY "欄位1"
HAVING (函數條件);
Store_NameTxn_DateSales
Los Angeles150005-Jan-1999
San Diego25007-Jan-1999
Los Angeles30008-Jan-1999
Boston70008-Jan-1999
SELECT Store_Name, SUM(Sales)
FROM Store_Information
GROUP BY Store_Name
HAVING SUM(Sales) > 1500;

結果如下:

Store_NameSUM(Sales)
Los Angeles1800

實作挑戰:

新增資料表

新增Student,Cource,Teacher三張資料表

CREATE TABLE Student (
  SId VARCHAR ( 10 ) PRIMARY KEY,
  Sname VARCHAR ( 10 ),
  age datetime,
  sex VARCHAR ( 10 ),
  Tid VARCHAR ( 10 ));

CREATE TABLE Course (
  CId VARCHAR ( 10 ) PRIMARY KEY,
  Cname VARCHAR ( 10 ),
  TId VARCHAR ( 10 ));

CREATE TABLE Teacher (
  TId VARCHAR ( 10 ) PRIMARY KEY,
  Tname VARCHAR ( 10 ));

create table SC(
  SId VARCHAR ( 10 ),
  CId VARCHAR ( 10 ),
  score decimal(18,1)
);

新增資料欄位:

INSERT INTO Student ( SId, Sname, age, sex, Tid )
VALUES
  ( '01', '趙雷', '1990-01-01', '男', '01' ),
  ( '02', '錢電', '1990-12-21', '男', '02' ),
  ( '03', '孫風', '1990-12-20', '男', '03' ),
  ( '04', '李雲', '1990-12-06', '男', '01' ),
  ( '05', '周梅', '1991-12-01', '女', '02' ),
  ( '06', '吳蘭', '1992-01-01', '女', '03' ),
  ( '07', '鄭竹', '1989-01-01', '女', '01' ),
  ( '08', '孫七', '2014-06-01', '女', '02' ),
  ( '09', '張三', '2017-12-20', '女', '02' ),
  ( '10', '李四', '2017-12-25', '女', '01' ),
  ( '11', '李大人', '2012-06-06', '女', '03' ),
  ( '12', '趙小孩', '2013-06-13', '女', '01' ),
  ( '13', '趙12', '2013-06-13', '女', '01' );
INSERT INTO Course ( CId, Cname, TId )
VALUES
  ( '01', '語文', '02' ),
  ( '02', '數學', '01' ),
  ( '03', '英語', '03' ),
  ( '04', '自然', '05' );
INSERT INTO Teacher ( TId, Tname )
VALUES
  ( '01', '張三' ),
  ( '02', '李四' ),
  ( '03', '王五' ),
  ( '04', '李二' ),
  ( '05', '王七' );
INSERT INTO SC ( SId, CId, score )
VALUES
  ( '01', '01', 80 ),
  ( '01', '02', 90 ),
  ( '01', '03', 99 ),
  ( '01', '04', 50 ),
  ( '02', '01', 70 ),
  ( '02', '02', 60 ),
  ( '02', '04', 50 ),
  ( '03', '01', 80 ),
  ( '03', '02', 80 ),
  ( '03', '03', 80 ),
  ( '03', '04', 80 ),
  ( '04', '01', 50 ),
  ( '04', '02', 30 ),
  ( '04', '03', 20 ),
  ( '04', '04', 90 ),
  ( '05', '01', 76 ),
  ( '05', '02', 87 ),
  ( '05', '04', 45 ),
  ( '06', '01', 31 ),
  ( '06', '03', 34 ),
  ( '07', '02', 89 ),
  ( '07', '03', 98 ),
  ( '08', '01', 82 ),
  ( '08', '02', 56 ),
  ( '08', '03', 77 ),
  ( '08', '04', 70 ),
  ( '09', '01', 70 ),
  ( '09', '02', 32 ),
  ( '09', '03', 72 ),
  ( '10', '01', 80 ),
  ( '10', '03', 80 ),
  ( '11', '01', 50 ),
  ( '11', '02', 30 ),
  ( '11', '03', 20 ),
  ( '12', '02', 100 ),
  ( '13', '01', 20 ),
  ( '13', '03', 64 );

簡單題目:

  1. 求每門課程的學生人數?

範例:

  1. 查詢選修了大於等於三堂課程的學生資訊

範例:

  • 範例為全部課程的
  1. 查詢「李」姓老師的數量

範例:

  1. 查詢課程編號為 01 且課程成績在 80 分以上的學生的學號和姓名

範例:


進階玩玩看:

  1. 查詢各科成績前三名的記錄 ,取得學生年齡、性別還有成績班級、(會的話可以給老師)

:::success
解答尚未公布!!!

解答連結
:::

訂閱研究文章

Get updates and learn from the best

More To Explore

Scroll to Top

hurry up !

軟體工程師培訓

限時免費報名中

藉由與「真實世界軟體專案」相同的技術、工具與開發流程,化簡成與商業機密無關、門檻較低更容易上手的「模擬專案」,讓你有機會在職場前輩的陪伴下,完成真槍實彈的練習,動手解決真實的問題,快速累積個人的經驗與作品,而不只是「學習技術」而已。