1. 程式人生 > >mysql基礎操作(1)

mysql基礎操作(1)

基礎操作:***********
1、查看錶中的資料庫:
mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| day15 |
| day28 |
| mybse |
| mysql |
| performance_schema |
| test |
+——————–+

2、刪除day15的資料庫:
mysql> drop database day15;
Query OK, 3 rows affected (0.03 sec)

3、檢視刪除後的資料庫:
mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| day28 |
| mybse |
| mysql |
| performance_schema |
| test |
+——————–+

3、建立day15的資料庫及設定編碼:
mysql> create database day15
-> default character set utf8;
Query OK, 1 row affected (0.00 sec)

4、進入到day15裡面修改預設的編碼:
mysql> use day15;
Database changed
mysql> alter database day15 default c
Query OK, 1 row affected (0.02 sec)

5、建立表:
mysql> create table student(
-> sid int,
-> sname varchar(20),
-> sage int
-> );
Query OK, 0 rows affected (0.01 sec)

6、檢視所有的表:


mysql> show tables;
+—————–+
| Tables_in_day15 |
+—————–+
| student |
+—————–+

7、查看錶的結構:
mysql> desc student;
+——-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| sid | int(11) | YES | | NULL | |
| sname | varchar(20) | YES | | NULL | |
| sage | int(11) | YES | | NULL | |
+——-+————-+——+—–+———+——-+

8、刪除表:
mysql> drop table student;
Query OK, 0 rows affected (0.00 sec)

9、新增欄位:
mysql> alter table student add column sgender varchar(2);
Query OK, 0 rows affected (0.01 sec)

10、顯示新增的欄位:
mysql> desc student;
+———+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———+————-+——+—–+———+——-+
| id | int(11) | YES | | NULL | |
| NAME | varchar(20) | YES | | NULL | |
| gender | varchar(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sgender | varchar(2) | YES | | NULL | |
+———+————-+——+—–+———+——-+

11、刪除欄位—>並顯示:
mysql> alter table student drop column sgender;
Query OK, 0 rows affected (0.03 sec)

mysql> desc student;
+——–+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——–+————-+——+—–+———+——-+
| id | int(11) | YES | | NULL | |
| NAME | varchar(20) | YES | | NULL | |
| gender | varchar(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+——–+————-+——+—–+———+——-+

12、新增remark欄位—>並修改欄位型別—->顯示修改後表的結構:
ALTER TABLE student ADD COLUMN remark VARCHAR(4);

mysql> alter table student modify column remark varchar(100);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> desc student;
+——–+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——–+————–+——+—–+———+——-+
| id | int(11) | YES | | NULL | |
| NAME | varchar(20) | YES | | NULL | |
| gender | varchar(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| remark | varchar(100) | YES | | NULL | |
+——–+————–+——+—–+———+——-+

13、修改欄位名稱—>顯示修改後的結構
mysql> alter table student change column gender sgender varchar(3);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> desc student;
+———+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———+————–+——+—–+———+——-+
| id | int(11) | YES | | NULL | |
| NAME | varchar(20) | YES | | NULL | |
| sgender | varchar(3) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| remark | varchar(100) | YES | | NULL | |
+———+————–+——+—–+———+——-+
注意: 先寫舊名字再寫新名字後面再加上欄位,後面跟欄位的型別

14、修改表名:
mysql> alter table student rename to teacher;
Query OK, 0 rows affected (0.01 sec)

增刪改資料********************
15、建立一個student1—>顯示錶的結構:
CREATE TABLE student(
id INT,
NAME VARCHAR(20),
gender VARCHAR(2),
age INT
)
mysql> desc student1;
+——–+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——–+————-+——+—–+———+——-+
| id | int(11) | YES | | NULL | |
| NAME | varchar(20) | YES | | NULL | |
| gender | varchar(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+——–+————-+——+—–+———+——-+

16、增加資料:
– 插入所有欄位。一定依次按順序插入
INSERT INTO student VALUES(1,’張三’,’男’,20);
– 注意不能少或多欄位值
– INSERT INTO student VALUES(2,’李四’,’女’); ——-(錯誤)
– 插入部分欄位
INSERT INTO student(id,NAME) VALUES(2,’李四’);

17、修改資料:
– 修改所有資料(建議少用)
UPDATE student SET gender=’女’;
– 帶條件的修改(推薦使用)
UPDATE student SET gender=’男’ WHERE id=1; – 修改id為1的學生,修改性別為男
– 修改多個欄位,注意: SET 欄位名=值,欄位名=值,….
UPDATE student SET gender=’男’,age=30 WHERE id=2; ———-set只使用一次,每個後面都新增逗號

18、刪除資料:
– 刪除所有資料(建議少用)
DELETE FROM student;
– 帶條件的刪除(推薦使用)
DELETE FROM student WHERE id=2;
– 另一種方式
– delete from: 可以全表刪除 1)可以帶條件刪除 2)只能刪除表的資料,不能刪除表的約束 3)使用delete from刪除的資料可以回滾(事務)
– truncate table: 可以全表刪除 1)不能帶條件刪除 2)即可以刪除表的資料,也可以刪除表的約束 3)使用truncate table刪除的資料不能回滾
測試:
18.1):新建一個test表—顯示結構
CREATE TABLE test(
id INT PRIMARY KEY AUTO_INCREMENT, – 自增長約束
NAME VARCHAR(20)
)
DESC test;
+——-+————-+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+—————-+
| id | int(11) | NO | PRI | NULL | auto_increment |
| NAME | varchar(20) | YES | | NULL | |
+——-+————-+——+—–+———+—————-+
18.2):完全刪除表中的資料兩種方法:
– 1.
DELETE FROM test;
– 2
TRUNCATE TABLE test;
18.3):向表中新增資料—>輸出表中的資料
INSERT INTO test(NAME) VALUES(‘zhangsan’);
INSERT INTO test(NAME) VALUES(‘zhangsan2’);
INSERT INTO test(NAME) VALUES(‘zhangsan3’);
SELECT * FROM test;

        +----+-----------+
        | id | NAME      |
        +----+-----------+
        |  1 | zhangsan  |
        |  2 | zhangsan2 |
        |  3 | zhangsan3 |
        +----+-----------+
18.4):刪除帶條件比較:
    -- delete from:
            mysql> delete from test where id=3;
            Query OK, 1 row affected (0.01 sec)
        mysql> SELECT * FROM test;
        +----+-----------+
        | id | NAME      |
        +----+-----------+
        |  1 | zhangsan  |
        |  2 | zhangsan2 |
        +----+-----------+ 
    刪除之後再新增:INSERT INTO test(NAME) VALUES('zhangsan3');
        mysql> SELECT * FROM test;
        +----+-----------+
        | id | NAME      |
        +----+-----------+
        |  1 | zhangsan  |
        |  2 | zhangsan2 |
        |  4 | zhangsan3 |
        +----+-----------+             ---id預設從4開始不能刪除表的約束
    -- truncate table:
        mysql> truncate table test where id=4;
        ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
        corresponds to your MySQL server version for the right syntax to use near 'where
             id=4' at line 1                 ----不能帶條件刪除
    刪除之後再新增:
        mysql> truncate table test;
        Query OK, 0 rows affected (0.01 sec)

        mysql> INSERT INTO test(NAME) VALUES('zhangsan');
        Query OK, 1 row affected (0.01 sec)

            mysql> SELECT * FROM test;
        +----+----------+
        | id | NAME     |
        +----+----------+
        |  1 | zhangsan |
        +----+----------+       ----即可以刪除表的資料,也可以刪除表的約束

19、查詢資料:
– 19.1 查詢所有列
SELECT * FROM student;

– 19.2 查詢指定列
SELECT id,NAME,gender FROM student;

– 19.3 查詢時指定別名(as)
– 注意: 在多表查詢是經常使用表的別名
SELECT id AS ‘編號’,NAME AS ‘姓名’ FROM student;

– 19.4 查詢時新增常量列 – 常量列
– 需求: 在查詢student表時新增一個班級列,內容為“java”
SELECT id,NAME,gender,age,’java’ FROM student1;
id name gender age java —添加了一個常量列
1 張三 女 20 java
2 李四 null null java
3 張2 女 18 java
–19.5 將新增的常量列指定別名:
SELECT id,NAME,gender,age,’java’ AS ‘年級’ FROM student1;
id NAME gender age 年級
1 張三 女 20 java
2 李四 null null java
3 張2 女 18 java

– 19.6 查詢時合併列
– 需求: 查詢每個學生的servlet和jsp的總成績
SELECT id,NAME,(servlet+jsp) AS ‘總成績’ FROM student1;
– 注意:合併列只能合併數值型別的欄位
SELECT id,(NAME+servlet) FROM student1; (錯誤)—name是字元,只能合併數值型別的欄位

– 19.8 查詢時去除重複記錄(DISTINCT)
– 需求: 查詢學生的性別 男 女
SELECT DISTINCT gender FROM student1;
– 另一種語法
SELECT DISTINCT(gender) FROM student1; –當做方法使用
– 需求: 查詢學生所在的地區
SELECT DISTINCT address FROM student1;

20、條件查詢(where)
– 20.1 邏輯條件: and(與) or(或)
– 需求: 查詢id為2,且姓名為李四的學生
SELECT * FROM student WHERE id=2 AND NAME=’李四’; – 交集

– 需求: 查詢id為2,或姓名為張三的學生
SELECT * FROM student WHERE id=2 OR NAME=’張三’; – 並集

– 20.2 比較條件: > < >= <= = <>(不等於) between and (等價於>= 且 <=)
– 需求: 查詢servlet成績大於70分的學生
SELECT * FROM student WHERE servlet>70;

– 需求: 查詢jsp成績大於等於75,且小於等於90分的學生
SELECT * FROM student WHERE jsp>=75 AND jsp<=90;
– 另一個語法
SELECT * FROM student WHERE jsp BETWEEN 75 AND 90; – (包前包後)
– 查詢表中女生資訊
SELECT * FROM student WHERE gender<>’男’;

21、判空條件
– 21.1 判空條件(null 空字串): is null / is not null / =” / <>”
– 需求: 查詢地址為空的學生(包括null和空字串)
– null vs 空字串
– null:表示沒有值
– 空字串:有值的!
– 判斷地址null
SELECT * FROM student WHERE address IS NULL ;
– 判斷地址空字串
SELECT * FROM student WHERE address=”;

SELECT * FROM student WHERE address IS NULL OR address=”; – (包括null和空字串)

– 需求: 查詢有地址的學生(不包括null和空字串)
SELECT * FROM student WHERE address IS NOT NULL AND address<>”;

22、模糊查詢:
– 22.1 模糊條件: like
– 通常使用以下替換標記:
– % : 表示任意個字元
– _ : 表示一個字元,如果出現連著的就是兩個字元
– 需求: 查詢姓‘張’的學生
SELECT * FROM student WHERE NAME LIKE ‘李%’;

– 需求: 查詢姓‘李’,且姓名只有兩個字的學生
SELECT * FROM student WHERE NAME LIKE ‘李_’;

23、聚合查詢
– 23.1 聚合查詢(使用聚合函式的查詢)
– 常用的聚合函式: sum() avg() max() min() count()
– 需求:查詢學生的servlet的總成績 (sum() :求和函式)
SELECT SUM(servlet) AS ‘servlet的總成績’ FROM student1;

– 需求: 查詢學生的servlet的平均分
SELECT AVG(servlet) AS ‘servlet的平均分’ FROM student1;

– 需求: 查詢當前servlet最高分
SELECT MAX(servlet) AS ‘最高分’ FROM student1;

– 需求: 查詢最低分
SELECT MIN(servlet) AS ‘最低分’ FROM student1;

– 需求: 統計當前有多少學生(count(欄位))
SELECT COUNT(*) FROM student1;

SELECT COUNT(id) FROM student1; –效率比COUNT(*)高

– 注意:count()函式統計的數量不包含null的資料
– 使用count統計表的記錄數,要使用不包含null值的欄位
SELECT COUNT(age) FROM student1;

24、分頁查詢
– 24.1 分頁查詢(limit 起始行,查詢幾行)
– 起始行從0開始
– 分頁:當前頁 每頁顯示多少條
– 分頁查詢當前頁的資料的sql: SELECT * FROM student LIMIT (當前頁-1)*每頁顯示多少條,每頁顯示多少條;

– 需求: 查詢第1,2條記錄(第1頁的資料)
SELECT * FROM student LIMIT 0,2;
– 查詢第3,4條記錄(第2頁的資料)
SELECT * FROM student LIMIT 2,2;
– 查詢第5,6條記錄(第3頁的資料)
SELECT * FROM student LIMIT 4,2;
– 查詢第7,8條記錄 (沒有記錄不顯示)
SELECT * FROM student LIMIT 6,2;

25、查詢排序
– 25.1 查詢排序(order by )
– 語法 :order by 欄位 asc/desc
– asc: 順序,正序。數值:遞增,字母:自然順序(a-z)
– desc: 倒序,反序。數值:遞減,字母:自然反序(z-a)

– 預設情況下,按照插入記錄順序排序
SELECT * FROM student;

– 需求: 按照id順序排序
SELECT * FROM student ORDER BY id ASC;
SELECT * FROM student ORDER BY id; – 預設正序

SELECT * FROM student ORDER BY id DESC;– 反序

– 注意:多個排序條件
– 需求: 按照servlet正序,按照jsp的倒序
SELECT * FROM student ORDER BY servlet ASC,jsp DESC;

26、分組查詢
– 26.1 分組查詢(group by)
– 需求: 查詢男女的人數
– 預期結果:
– 男 3
— 女 2
– 1) 把學生按照性別分組(GROUP BY gender)
– 2) 統計每組的人數(COUNT(*))
SELECT gender,COUNT(*) FROM student GROUP BY gender;

– 26.2 分組查詢後篩選
– 需求: 查詢總人數大於2的性別
– 1) 查詢男女的人數
– 2)篩選出人數大於2的記錄(having)
–3 ) HAVING語句通常與GROUP BY語句聯合使用,用來過濾由GROUP BY語句返回的記錄集

— 注意: 分組之前條件使用where關鍵字,分組之後條件使用having關鍵字
SELECT gender,COUNT() FROM student WHERE GROUP BY gender HAVING COUNT()>2; – 分組之前可以新增where條件

– 以性別分類將性別人數大於4的性別輸出
SELECT gender,COUNT() FROM employee GROUP BY gender HAVING COUNT()>4

– 平均成績>80的人,以名字分組
SELECT sname, AVG(jsp) AS ‘JSP’ FROM employee GROUP BY sname
HAVING AVG(jsp)>80

— 練習 –
CREATE TABLE student2(
id INT,
NAME VARCHAR(20),
chinese FLOAT,
english FLOAT,
math FLOAT
);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(1,’張小明’,89,78,90);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(2,’李進’,67,53,95);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(3,’王五’,87,78,77);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(4,’李一’,88,98,92);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(5,’李來財’,82,84,67);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(6,’張進寶’,55,85,45);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(7,’黃蓉’,75,65,30);

– 查詢表中所有學生的資訊。
SELECT * FROM student2;

– 查詢表中所有學生的姓名和對應的英語成績。
SELECT NAME,english FROM student2;

– 過濾表中英語成績的重複資料
SELECT DISTINCT(english) FROM student2;

– 使用別名表示學生分數。
SELECT NAME AS ‘姓名’,chinese AS ‘語文’,english AS ‘英語’,math AS ‘數學’ FROM student2;

– 查詢姓名為李一的學生成績
SELECT * FROM student2 WHERE NAME=’李一’;

– 查詢英語成績大於等於90分的同學
SELECT * FROM student2 WHERE english>=90;

– 查詢總分大於200分的所有同學
SELECT * FROM student2 WHERE (chinese+english+math)>200;

– 查詢所有姓李的學生英語成績。
SELECT NAME,english FROM student2 WHERE NAME LIKE ‘李%’;

– 查詢英語>80或者總分>200的同學
SELECT * FROM student2 WHERE english>80 OR (chinese+english+math)>200

– 統計每個學生的總分。
SELECT id,NAME,(chinese+english+math) AS ‘總成績’ FROM student2;

– 在所有學生總分數上加10分特長分。
SELECT id,NAME,(chinese+english+math+10) AS ‘總成績’ FROM student2;