學習mysql_day2

數據庫環境準備:

創建數據庫

create database mysql_demo1 charset=utf8;

MariaDB [(none)]> create database mysql_demo1 charset=utf8;
Query OK, 1 row affected (0.00 sec)
使用數據庫

use mysql_demo1;

MariaDB [(none)]> use mysql_demo1;
Database changed
創建表參數
unsigned 整型無符號
signed  整型有符號
primary key 詳解參考:http://c.biancheng.net/view/2440.html
foreign key  詳解參考:http://c.biancheng.net/view/2441.html
unique key   詳解參考:http://c.biancheng.net/view/2445.html
auto_increment 自增字段
not null 不爲空
default 默認值
int int類型
char 存儲字符串
varchar  存儲字符串(char是屬於固定長度的字符類型,而varchar是屬於可變長度的字符類型。)
tinyint 型的字段如果不設置UNSIGNED類型,存儲-128127的整數。 (tinyint(1)tinyint(),tinyint(3),tinyint(4)(稍後詳解)
DECIMAL (5,2)規定了存儲的值將不會超過5位數字,開且小數點後面有2位數字。
enum 枚舉類型 添加新的數據不爲這四個值則會報錯
bit 利用它可定義一個位變量,但不能定義位指針,也不能定義位數組。它的值是一個二進制位,不是0就是1,類似Boolean類型中的TrueFalse
創建students表
create table students(
	id int unsigned primary key auto_increment not null,
	name varchar(20) default '',
	age tinyint unsigned default 0,
	height decimal(5,2),
	gender enum('男','女','中性','保密') default '保密',
	cls_id int unsigned default 0,
	is_delete bit default 0
);
MariaDB [mysql_demo1]> create table students(
    -> id int unsigned primary key auto_increment not null,
    -> name varchar(20) default '',
    -> age tinyint unsigned default 0,
    -> height decimal(5,2),
    -> gender enum('男','女','中性','保密') default '保密',
    -> cls_id int unsigned default 0,
    -> is_delete bit default 0
    -> );
Query OK, 0 rows affected (0.01 sec)

創建classes表

create table classes(
id int unsigned auto_increment primary key not null,
name varchar(30) not null
);

MariaDB [mysql_demo1]> create table classes(
    -> id int unsigned auto_increment primary key not null,
    -> name varchar(30) not null
    -> );
Query OK, 0 rows affected (0.00 sec)
查看錶是否創建成功

show tables;

MariaDB [mysql_demo1]> show tables;
+-----------------------+
| Tables_in_mysql_demo1 |
+-----------------------+
| classes               |
| students              |
+-----------------------+
2 rows in set (0.00 sec)

準備數據:

向students表中插入數據

insert into students values
(0,‘小明’,18,180.00,1,1,0),
(0,‘小張’,18,160.00,1,2,0),
(0,‘小紅’,20,170.00,2,1,0),
(0,‘周杰’,38,175.00,1,1,0),
(0,‘彭玉宴’,56,150.00,1,2,0),
(0,‘劉德化’,29,150.00,1,2,0),
(0,‘張學友’,36,180.00,1,1,0),
(0,‘周杰倫’,25,166.00,1,1,0),
(0,‘風姐’,16,169.00,2,1,0),
(0,‘王小明’,57,162.00,1,2,1),
(0,‘張小華’,46,173.00,2,1,0),
(0,‘金星’,29,175.00,2,1,1),
(0,‘黃蓉’,66,185.00,3,2,0),
(0,‘古天樂’,15,186.00,4,2,0),
(0,‘劉小海’,31,175.00,4,1,0),
(0,‘小月月’,57,163.00,2,1,0);

MariaDB [mysql_demo1]> insert into students values
    -> (0,'小明',18,180.00,1,1,0),
    -> (0,'小張',18,160.00,1,2,0),
    -> (0,'小紅',20,170.00,2,1,0),
    -> (0,'周杰',38,175.00,1,1,0),
    -> (0,'彭玉宴',56,150.00,1,2,0),
    -> (0,'劉德化',29,150.00,1,2,0),
    -> (0,'張學友',36,180.00,1,1,0),
    -> (0,'周杰倫',25,166.00,1,1,0),
    -> (0,'風姐',16,169.00,2,1,0),
    -> (0,'王小明',57,162.00,1,2,1),
    -> (0,'張小華',46,173.00,2,1,0),
    -> (0,'金星',29,175.00,2,1,1),
    -> (0,'黃蓉',66,185.00,3,2,0),
    -> (0,'古天樂',15,186.00,4,2,0),
    -> (0,'劉小海',31,175.00,4,1,0),
    -> (0,'小月月',57,163.00,2,1,0);
Query OK, 16 rows affected (0.00 sec)
Records: 16  Duplicates: 0  Warnings: 0

向classes表插入數據

insert into classes values
(0, “python_01期”),
(0, “python_02期”);

MariaDB [mysql_demo1]> insert into classes values 
    -> (0, "python_01期"), 
    -> (0, "python_02期");
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
查詢所有字段

select * from 表名; (也驗證一下上面數據是否插入成功)
select * from students;
select * from classes;

MariaDB [mysql_demo1]> select * from students; 
+----+-----------+------+--------+--------+--------+-----------+
| id | name      | age  | height | gender | cls_id | is_delete |
+----+-----------+------+--------+--------+--------+-----------+
|  1 | 小明      |   18 | 180.00 ||      1 |           |
|  2 | 小張      |   18 | 160.00 ||      2 |           |
|  3 | 小紅      |   20 | 170.00 ||      1 |           |
|  4 | 周杰      |   38 | 175.00 ||      1 |           |
|  5 | 彭玉宴    |   56 | 150.00 ||      2 |           |
|  6 | 劉德化    |   29 | 150.00 ||      2 |           |
|  7 | 張學友    |   36 | 180.00 ||      1 |           |
|  8 | 周杰倫    |   25 | 166.00 ||      1 |           |
|  9 | 風姐      |   16 | 169.00 ||      1 |           |
| 10 | 王小明    |   57 | 162.00 ||      2 |          |
| 11 | 張小華    |   46 | 173.00 ||      1 |           |
| 12 | 金星      |   29 | 175.00 ||      1 |          |
| 13 | 黃蓉      |   66 | 185.00 | 中性   |      2 |           |
| 14 | 古天樂    |   15 | 186.00 | 保密   |      2 |           |
| 15 | 劉小海    |   31 | 175.00 | 保密   |      1 |           |
| 16 | 小月月    |   57 | 163.00 ||      1 |           |
+----+-----------+------+--------+--------+--------+-----------+
16 rows in set (0.00 sec)

MariaDB [mysql_demo1]> select * from classes; 
+----+--------------+
| id | name         |
+----+--------------+
|  1 | python_01期  |
|  2 | python_02期  |
+----+--------------+
2 rows in set (0.00 sec)
查詢指定字段

select 列1,列2,… from 表名;
select name,age from students;

MariaDB [mysql_demo1]> select name,age from students;
+-----------+------+
| name      | age  |
+-----------+------+
| 小明      |   18 |
| 小張      |   18 |
| 小紅      |   20 |
| 周杰      |   38 |
| 彭玉宴    |   56 |
| 劉德化    |   29 |
| 張學友    |   36 |
| 周杰倫    |   25 |
| 風姐      |   16 |
| 王小明    |   57 |
| 張小華    |   46 |
| 金星      |   29 |
| 黃蓉      |   66 |
| 古天樂    |   15 |
| 劉小海    |   31 |
| 小月月    |   57 |
+-----------+------+
16 rows in set (0.00 sec)
使用 as 給字段起別名 作用於當前語句

select 字段 as 名字… from 表名;
select name as 名字,age as 年齡 from students;

MariaDB [mysql_demo1]> select name as 名字,age as 年齡 from students;
+-----------+-------------+
| 名字      | as 年齡    |
+-----------+-------------+
| 小明      |          18 |
| 小張      |          18 |
| 小紅      |          20 |
| 周杰      |          38 |
| 彭玉宴    |          56 |
| 劉德化    |          29 |
| 張學友    |          36 |
| 周杰倫    |          25 |
| 風姐      |          16 |
| 王小明    |          57 |
| 張小華    |          46 |
| 金星      |          29 |
| 黃蓉      |          66 |
| 古天樂    |          15 |
| 劉小海    |          31 |
| 小月月    |          57 |
+-----------+-------------+
16 rows in set (0.00 sec)
使用 as 給表名起別名 作用於當前語句

select 表別名.字段1,表別名.字段2 from 表 as 表別名;
select s.name,s.age from students as s;

MariaDB [mysql_demo1]> select s.name,s.age from students as s;
+-----------+------+
| name      | age  |
+-----------+------+
| 小明      |   18 |
| 小張      |   18 |
| 小紅      |   20 |
| 周杰      |   38 |
| 彭玉宴    |   56 |
| 劉德化    |   29 |
| 張學友    |   36 |
| 周杰倫    |   25 |
| 風姐      |   16 |
| 王小明    |   57 |
| 張小華    |   46 |
| 金星      |   29 |
| 黃蓉      |   66 |
| 古天樂    |   15 |
| 劉小海    |   31 |
| 小月月    |   57 |
+-----------+------+
16 rows in set (0.00 sec)
跨表查詢 這種查不準不常用

select students.name,classes.name from students,classes;

MariaDB [mysql_demo1]> select students.name,classes.name from students,classes;
+-----------+--------------+
| name      | name         |
+-----------+--------------+
| 小明      | python_01期  |
| 小明      | python_02期  |
| 小張      | python_01期  |
| 小張      | python_02期  |
| 小紅      | python_01期  |
| 小紅      | python_02期  |
| 周杰      | python_01期  |
| 周杰      | python_02期  |
| 彭玉宴    | python_01期  |
| 彭玉宴    | python_02期  |
| 劉德化    | python_01期  |
| 劉德化    | python_02期  |
| 張學友    | python_01期  |
| 張學友    | python_02期  |
| 周杰倫    | python_01期  |
| 周杰倫    | python_02期  |
| 風姐      | python_01期  |
| 風姐      | python_02期  |
| 王小明    | python_01期  |
| 王小明    | python_02期  |
| 張小華    | python_01期  |
| 張小華    | python_02期  |
| 金星      | python_01期  |
| 金星      | python_02期  |
| 黃蓉      | python_01期  |
| 黃蓉      | python_02期  |
| 古天樂    | python_01期  |
| 古天樂    | python_02期  |
| 劉小海    | python_01期  |
| 劉小海    | python_02期  |
| 小月月    | python_01期  |
| 小月月    | python_02期  |
+-----------+--------------+
32 rows in set (0.00 sec)
distinct 消除重複行 也就是指定列的不重複的值

以students爲例 裏面有四個性別 我們查詢出來
select distinct gender from students;

MariaDB [mysql_demo1]> select distinct gender from students;
+--------+
| gender |
+--------+
||
||
| 中性   |
| 保密   |
+--------+
4 rows in set (0.00 sec)

如果distinct後有多個字段, 只有當查詢的多列的查詢結果完全相同才能去重

查詢age 大於18歲的所有數據

select * from students where age > 18;

MariaDB [mysql_demo1]> select * from students where age > 18;
+----+-----------+------+--------+--------+--------+-----------+
| id | name      | age  | height | gender | cls_id | is_delete |
+----+-----------+------+--------+--------+--------+-----------+
|  3 | 小紅      |   20 | 170.00 ||      1 |           |
|  4 | 周杰      |   38 | 175.00 ||      1 |           |
|  5 | 彭玉宴    |   56 | 150.00 ||      2 |           |
|  6 | 劉德化    |   29 | 150.00 ||      2 |           |
|  7 | 張學友    |   36 | 180.00 ||      1 |           |
|  8 | 周杰倫    |   25 | 166.00 ||      1 |           |
| 10 | 王小明    |   57 | 162.00 ||      2 |          |
| 11 | 張小華    |   46 | 173.00 ||      1 |           |
| 12 | 金星      |   29 | 175.00 ||      1 |          |
| 13 | 黃蓉      |   66 | 185.00 | 中性   |      2 |           |
| 15 | 劉小海    |   31 | 175.00 | 保密   |      1 |           |
| 16 | 小月月    |   57 | 163.00 ||      1 |           |
+----+-----------+------+--------+--------+--------+-----------+
查詢age 大於18 小於40的所有數據 有兩種方法

select * from students where age > 18 and age < 40;
select * from students where age between 18 and 40;
注意兩種不同之處 between是並等於條件

MariaDB [mysql_demo1]> select * from students where age > 18 and age < 40;
+----+-----------+------+--------+--------+--------+-----------+
| id | name      | age  | height | gender | cls_id | is_delete |
+----+-----------+------+--------+--------+--------+-----------+
|  3 | 小紅      |   20 | 170.00 ||      1 |           |
|  4 | 周杰      |   38 | 175.00 ||      1 |           |
|  6 | 劉德化    |   29 | 150.00 ||      2 |           |
|  7 | 張學友    |   36 | 180.00 ||      1 |           |
|  8 | 周杰倫    |   25 | 166.00 ||      1 |           |
| 12 | 金星      |   29 | 175.00 ||      1 |          |
| 15 | 劉小海    |   31 | 175.00 | 保密   |      1 |           |
+----+-----------+------+--------+--------+--------+-----------+
7 rows in set (0.00 sec)
MariaDB [mysql_demo1]> select * from students where age between 18 and 40;
+----+-----------+------+--------+--------+--------+-----------+
| id | name      | age  | height | gender | cls_id | is_delete |
+----+-----------+------+--------+--------+--------+-----------+
|  1 | 小明      |   18 | 180.00 ||      1 |           |
|  2 | 小張      |   18 | 160.00 ||      2 |           |
|  3 | 小紅      |   20 | 170.00 ||      1 |           |
|  4 | 周杰      |   38 | 175.00 ||      1 |           |
|  6 | 劉德化    |   29 | 150.00 ||      2 |           |
|  7 | 張學友    |   36 | 180.00 ||      1 |           |
|  8 | 周杰倫    |   25 | 166.00 ||      1 |           |
| 12 | 金星      |   29 | 175.00 ||      1 |          |
| 15 | 劉小海    |   31 | 175.00 | 保密   |      1 |           |
+----+-----------+------+--------+--------+--------+-----------+
9 rows in set (0.00 sec)
查詢age 大於18小於40的所有女性的數據

select * from students where age between 18 and 40 and gender=‘女’;

MariaDB [mysql_demo1]> select * from students where age between 18 and 40 and gender='女';
+----+--------+------+--------+--------+--------+-----------+
| id | name   | age  | height | gender | cls_id | is_delete |
+----+--------+------+--------+--------+--------+-----------+
|  3 | 小紅   |   20 | 170.00 ||      1 |           |
| 12 | 金星   |   29 | 175.00 ||      1 |          |
+----+--------+------+--------+--------+--------+-----------+
2 rows in set (0.00 sec)
order by 排序 asc正序 desc倒序 查詢男性身高從高到底查詢

select * from students where gender=‘男’ order by height desc;

MariaDB [mysql_demo1]> select * from students where gender='男' order by height desc;
+----+-----------+------+--------+--------+--------+-----------+
| id | name      | age  | height | gender | cls_id | is_delete |
+----+-----------+------+--------+--------+--------+-----------+
|  1 | 小明      |   18 | 180.00 ||      1 |           |
|  7 | 張學友    |   36 | 180.00 ||      1 |           |
|  4 | 周杰      |   38 | 175.00 ||      1 |           |
|  8 | 周杰倫    |   25 | 166.00 ||      1 |           |
| 10 | 王小明    |   57 | 162.00 ||      2 |          |
|  2 | 小張      |   18 | 160.00 ||      2 |           |
|  5 | 彭玉宴    |   56 | 150.00 ||      2 |           |
|  6 | 劉德化    |   29 | 150.00 ||      2 |           |
+----+-----------+------+--------+--------+--------+-----------+
8 rows in set (0.00 sec)

查詢男性身高從高到底查詢 如果身高一樣則年齡從高到底來顯示 依次類推

select * from students where gender=‘男’ order by height desc,age desc;

MariaDB [mysql_demo1]> select * from students where gender='男' order by height desc,age desc;
+----+-----------+------+--------+--------+--------+-----------+
| id | name      | age  | height | gender | cls_id | is_delete |
+----+-----------+------+--------+--------+--------+-----------+
|  7 | 張學友    |   36 | 180.00 ||      1 |           |
|  1 | 小明      |   18 | 180.00 ||      1 |           |
|  4 | 周杰      |   38 | 175.00 ||      1 |           |
|  8 | 周杰倫    |   25 | 166.00 ||      1 |           |
| 10 | 王小明    |   57 | 162.00 ||      2 |          |
|  2 | 小張      |   18 | 160.00 ||      2 |           |
|  5 | 彭玉宴    |   56 | 150.00 ||      2 |           |
|  6 | 劉德化    |   29 | 150.00 ||      2 |           |
+----+-----------+------+--------+--------+--------+-----------+
8 rows in set (0.01 sec)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章