Datawhale MySQL 訓練營 Task3 表操做

學習內容

1.MySQL 表數據類型

MySQL 支持數值、日期時間和字符串三種類型。
具體的類型說明能夠參考菜鳥教程的總結mysql

2. 用SQL語句建立表

CREATE TABLE table_name
(
    prod_id CHAR(10) NOT NULL,
    vend_id CHAR(10) NOT NULL,
    prod_name CHAR(254) NOT NULL,
    prod_price DECIMAL(8,2) NOT NULL DEFAULT 0.00,
    prod_desc TEXT(1000) NULL
);

語句解釋sql

  • CREATE TABLE name 設定表的名字;
  • 列 定義在圓括號內,列與列之間用 , 分隔;
  • 須要指明列的的類型、大小和約束

類型包括數值、字符和日期類型;
NULL / NOT NULL 表示是否容許該列缺值;若是不指定NOT NULL 則默認 NULL;DEFAULT 指明默認值。安全

  • 設定主鍵
    參考
    建表時使用 primary key 來指明
CREATE TABLE tableName(
    id INT PRIMARY KEY
);
-- OR
CREATE TABLE tableName(
    id INT,
    PRIMARY KEY (id)
);

建完表以後,增長主鍵學習

ALTER TABLE tableName ADD PRIMARY KEY(id)

3. 用SQL語句向表中添加數據

INSERT INTO table_name
VALUES(xxxxx);

語句解釋: 向表中插入數據,數據在VALUES 子句中給出;VALUES 按照建立表的列的順序填寫(這樣會不安全);.net

  • 指定列名(推薦使用這種方式)
INSERT INTO Customers(cust_id,
    cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country,
    cust_contact,
    cust_email)
VALUES('1000000006',
    'Toy Land',
    '123 Any Street',
    'New York',
    'NY',
    '11111',
    'USA',
    NULL,
    NULL);

沒有指明的列是空的(要求沒指出的列容許空或者有默認值);code

4. 用SQL語句刪除表

DROP TABBLE table_name;

語句解釋, DROP 永久刪除表,沒有確認也不能撤銷;htm

當你再也不須要該表時, 用 drop;當你仍要保留該表,但要刪除全部記錄時, 用 truncate;當你要刪除部分記錄時(always with a WHERE clause), 用 delete。blog

DELETE 刪除行

DROP 刪除表

TRUNCATE 保留表,刪除數據

5. 用SQL語句修改表

ALTER TABLE
  • 修改列名
-- 將test字段改成test1
-- ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段類型 約束條件
ALTER TABLE user10 CHANGE test test1 CHAR(32) NOT NULL DEFAULT '123';
  • 修改表中數據
--修改列類型
ALTER TABLE tableName 
ALTER COLUMN columnName VARCHAR(4000)

--修改數據
update 表名  set 列名='須要修改的值' where 列名='原來的值'
  • 刪除行
DELETE FROM 表名稱
WHERE 列名稱 = 值
  • 刪除列
ALTER TABLE Vendors
DROP COLUMN vend_phone;
  • 新建列
ALTER TABLE Vendors
ADD vend_phone CHAR(20);
  • 新建行
INSERT INTO tablename [(columns, ...)]
VALUES(values, ...)
  • 重命名錶
ALTER TABLE test RENAME test1

做業

  • 1.項目三:超過5名學生的課(難度:簡單)
    建立以下所示的courses 表 ,有: student (學生) 和 class (課程)。
    例如,表:
+---------+------------+
| student | class      |
+---------+------------+
| A       | Math       |
| B       | English    |
| C       | Math       |
| D       | Biology    |
| E       | Math       |
| F       | Computer   |
| G       | Math       |
| H       | Math       |
| I       | Math       |
| A       | Math       |
+---------+------------+

編寫一個 SQL 查詢,列出全部超過或等於5名學生的課。
Note:
學生在每一個課中不該被重複計算。教程

解答:

CREATE TABLE courses(
student VARCHAR(64) NOT NULL,
class VARCHAR(20)
);

INSERT INTO courses VALUES('A','Math');
INSERT INTO courses VALUES('B','English');
INSERT INTO courses VALUES('C','Math');
INSERT INTO courses VALUES('D','Biology');
INSERT INTO courses VALUES('E','Math');
INSERT INTO courses VALUES('F','Computer');
INSERT INTO courses VALUES('G','Math');
INSERT INTO courses VALUES('H','Math');
INSERT INTO courses VALUES('I','Math');
INSERT INTO courses VALUES('A','Math');

SELECT class
FROM courses
GROUP BY class
HAVING COUNT(DISTINCT student)>=5
  • 2.項目四:交換工資(難度:簡單)
    建立一個 salary表,以下所示,有m=男性 和 f=女性的值 。
    例如:
| id | name | sex | salary |
|----|------|-----|--------|
| 1  | A    | m   | 2500   |
| 2  | B    | f   | 1500   |
| 3  | C    | m   | 5500   |
| 4  | D    | f   | 500    |

交換全部的 f 和 m 值(例如,將全部 f 值更改成 m,反之亦然)。要求使用一個更新查詢,而且沒有中間臨時表。
運行你所編寫的查詢語句以後,將會獲得如下表:

| id | name | sex | salary |
|----|------|-----|--------|
| 1  | A    | f   | 2500   |
| 2  | B    | m   | 1500   |
| 3  | C    | f   | 5500   |
| 4  | D    | m   | 500    |
CREATE TABLE salary(
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20) NOT NULL,
sex CHAR NOT NULL,
salary int
);

INSERT INTO salary VALUES(1,'A','m',2500);
INSERT INTO salary VALUES(2,'B','f',5500);
INSERT INTO salary VALUES(3,'C','m',5000);
INSERT INTO salary VALUES(4,'D','f',1500);
INSERT INTO salary VALUES(5,'E','f',2000);

UPDATE salary
SET sex = 
CASE
     WHEN sex='f' THEN 'm'
     WHEN sex='m' THEN 'f'
     ELSE sex
END;

SELECT * FROM salary;

參考連接

參考瞭如下博客

  1. http://www.javashuo.com/article/p-tmcypyro-hu.html
相關文章
相關標籤/搜索