MySQL基礎(建庫,查表,寫表等)

創建數據庫

CREATE DATABASE DATABASE_NAME;

create database pet;

選擇數據庫

USE DATABASE_NAME;

use pet;

查看所有數據庫

SHOW DATABASES;

在當前數據庫中創建表

CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

顯示錶中列的屬性

DESCRIBE TABLE_NAME;

DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | varchar(20) | YES  |     | NULL    |       |
| owner   | varchar(20) | YES  |     | NULL    |       |
| species | varchar(20) | YES  |     | NULL    |       |
| sex     | char(1)     | YES  |     | NULL    |       |
| birth   | date        | YES  |     | NULL    |       |
| death   | date        | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
DESCRIBE可以簡寫爲desc

查看當前數據庫內的所有表

SHOW TABLES;

+---------------+
| Tables_in_pet |
+---------------+
| pet           |
+---------------+

將數據插入表

insert into pet values('Fluffy','Harold','cat','F','1993-02-04',NULL);
insert into pet values('Chirpy','Gwen','bird','F','1998-09-11',NULL);
insert into pet values('Whistler','Gwen','bird',NULL,'1997-12-09',NULL);
insert into pet values('Slim','Benny','snake','m','1996-04-29',NULL);
insert into pet values('Claws','Gwen','cat','m','1994-03-17',NULL);
insert into pet values('Buffy','Harold','dog','F','1989-05-13',NULL);
insert into pet values('Fang','Benny','dog','m','1990-08-27',NULL);
insert into pet values('Bowser','Diane','dog','F','1979-08-31','1995-07-29');

向表中插入數據,寵物名,主人,種類,性別,出生日期,死亡日期

查看錶中所有數據

select * from pet;

+----------+--------+---------+------+------------+------------+
| name     | owner  | species | sex  | birth      | death      |
+----------+--------+---------+------+------------+------------+
| Fluffy   | Harold | cat     | F    | 1993-02-04 | NULL       |
| Chirpy   | Gwen   | bird    | F    | 1998-09-11 | NULL       |
| Whistler | Gwen   | bird    | NULL | 1997-12-09 | NULL       |
| Slim     | Benny  | snake   | m    | 1996-04-29 | NULL       |
| Claws    | Gwen   | cat     | m    | 1994-03-17 | NULL       |
| Buffy    | Harold | dog     | F    | 1989-05-13 | NULL       |
| Fang     | Benny  | dog     | m    | 1990-08-27 | NULL       |
| Bowser   | Diane  | dog     | F    | 1979-08-31 | 1995-07-29 |
+----------+--------+---------+------+------------+------------+

查看寵物與出生日期

select name,birth from pet;
+----------+------------+
| name     | birth      |
+----------+------------+
| Fluffy   | 1993-02-04 |
| Chirpy   | 1998-09-11 |
| Whistler | 1997-12-09 |
| Slim     | 1996-04-29 |
| Fluffy   | 1993-02-04 |
| Claws    | 1994-03-17 |
| Buffy    | 1989-05-13 |
| Fang     | 1990-08-27 |
| Bowser   | 1979-08-31 |
+----------+------------+

查看特定行,例如查看名爲Fluffy的寵物

select * from pet where name = 'fluffy';

+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | F    | 1993-02-04 | NULL  |
+--------+--------+---------+------+------------+-------+

查看寵物claws的生日

select name,birth from pet where name = 'claws';

+-------+------------+
| name  | birth      |
+-------+------------+
| Claws | 1994-03-17 |
+-------+------------+

查看所有生日大於1990-01-01的寵物與其主人

select * from pet where birth > '1990-01-01'; 

+----------+--------+---------+------+------------+-------+
| name     | owner  | species | sex  | birth      | death |
+----------+--------+---------+------+------------+-------+
| Fluffy   | Harold | cat     | F    | 1993-02-04 | NULL  |
| Chirpy   | Gwen   | bird    | F    | 1998-09-11 | NULL  |
| Whistler | Gwen   | bird    | NULL | 1997-12-09 | NULL  |
| Slim     | Benny  | snake   | m    | 1996-04-29 | NULL  |
| Fluffy   | Harold | cat     | F    | 1993-02-04 | NULL  |
| Claws    | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Fang     | Benny  | dog     | m    | 1990-08-27 | NULL  |
+----------+--------+---------+------+------------+-------+

可以利用and運算符,來定位母貓(物種爲貓同時性別爲母)

select * from pet where species = 'cat' and sex = 'f'; 
 
+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | F    | 1993-02-04 | NULL  |
| Fluffy | Harold | cat     | F    | 1993-02-04 | NULL  |
+--------+--------+---------+------+------------+-------+

可以利用or運算符定位定位種類爲狗與種類爲貓的行

select * from pet where species = 'cat' or species = 'dog';

+--------+--------+---------+------+------------+------------+
| name   | owner  | species | sex  | birth      | death      |
+--------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat     | F    | 1993-02-04 | NULL       |
| Fluffy | Harold | cat     | F    | 1993-02-04 | NULL       |
| Claws  | Gwen   | cat     | m    | 1994-03-17 | NULL       |
| Buffy  | Harold | dog     | F    | 1989-05-13 | NULL       |
| Fang   | Benny  | dog     | m    | 1990-08-27 | NULL       |
| Bowser | Diane  | dog     | F    | 1979-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

還可以將and與or運算符結合到一起使用,例如查找所有的母貓與公狗

select * from pet where (species = 'dog' and sex = 'm') or (species = 'cat' and sex = 'f');
+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | F    | 1993-02-04 | NULL  |
| Fang   | Benny  | dog     | m    | 1990-08-27 | NULL  |
+--------+--------+---------+------+------------+-------+

可以根據寵物的生日進行排序

升序
select name,species,birth from pet order by birth asc;

+----------+---------+------------+
| name     | species | birth      |
+----------+---------+------------+
| Bowser   | dog     | 1979-08-31 |
| Buffy    | dog     | 1989-05-13 |
| Fang     | dog     | 1990-08-27 |
| Fluffy   | cat     | 1993-02-04 |
| Fluffy   | cat     | 1993-02-04 |
| Claws    | cat     | 1994-03-17 |
| Slim     | snake   | 1996-04-29 |
| Whistler | bird    | 1997-12-09 |
| Chirpy   | bird    | 1998-09-11 |
+----------+---------+------------+
降序
select name,species,birth from pet order by birth desc;

+----------+---------+------------+
| name     | species | birth      |
+----------+---------+------------+
| Chirpy   | bird    | 1998-09-11 |
| Whistler | bird    | 1997-12-09 |
| Slim     | snake   | 1996-04-29 |
| Claws    | cat     | 1994-03-17 |
| Fluffy   | cat     | 1993-02-04 |
| Fluffy   | cat     | 1993-02-04 |
| Fang     | dog     | 1990-08-27 |
| Buffy    | dog     | 1989-05-13 |
| Bowser   | dog     | 1979-08-31 |
+----------+---------+------------+

還可以將物種歸類後在進行生日排序

select name,species,birth from pet order by species,birth asc;

+----------+---------+------------+
| name     | species | birth      |
+----------+---------+------------+
| Whistler | bird    | 1997-12-09 |
| Chirpy   | bird    | 1998-09-11 |
| Fluffy   | cat     | 1993-02-04 |
| Fluffy   | cat     | 1993-02-04 |
| Claws    | cat     | 1994-03-17 |
| Bowser   | dog     | 1979-08-31 |
| Buffy    | dog     | 1989-05-13 |
| Fang     | dog     | 1990-08-27 |
| Slim     | snake   | 1996-04-29 |
+----------+---------+------------+

select name,species,birth from pet order by species,birth desc;

+----------+---------+------------+
| name     | species | birth      |
+----------+---------+------------+
| Chirpy   | bird    | 1998-09-11 |
| Whistler | bird    | 1997-12-09 |
| Claws    | cat     | 1994-03-17 |
| Fluffy   | cat     | 1993-02-04 |
| Fluffy   | cat     | 1993-02-04 |
| Fang     | dog     | 1990-08-27 |
| Buffy    | dog     | 1989-05-13 |
| Bowser   | dog     | 1979-08-31 |
| Slim     | snake   | 1996-04-29 |
+----------+---------+------------+

可以使用timestampdiff()函數來計算日期差,從而計算出年齡,詳細用法請百度

SELECT petname, birth, CURDATE(), TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age FROM pet;

+----------+------------+------------+------+
| petname  | birth      | CURDATE()  | age  |
+----------+------------+------------+------+
| wangcai  | 2016-03-04 | 2020-03-14 |    4 |
| dongdong | 2016-05-03 | 2020-03-14 |    3 |
| tangyuan | 2015-02-09 | 2020-03-14 |    5 |
| ergou    | 2019-09-09 | 2020-03-14 |    0 |
| caiwang  | 2016-05-03 | 2020-03-14 |    3 |
| lanqiu   | 2019-06-09 | 2020-03-14 |    0 |
+----------+------------+------------+------+

可以使用timestampdiff()函數來列出所有寵物的生日所在的月

select petname,birth,month(birth) from pet;

+----------+------------+--------------+
| petname  | birth      | month(birth) |
+----------+------------+--------------+
| wangcai  | 2016-03-04 |            3 |
| dongdong | 2016-05-03 |            5 |
| tangyuan | 2015-02-09 |            2 |
| ergou    | 2019-09-09 |            9 |
| caiwang  | 2016-05-03 |            5 |
| lanqiu   | 2019-06-09 |            6 |
+----------+------------+--------------+

也可以列出所有生日在5月的寵物

select petname,birth,month(birth) from pet where month(birth) = '5';

+----------+------------+--------------+
| petname  | birth      | month(birth) |
+----------+------------+--------------+
| dongdong | 2016-05-03 |            5 |
| caiwang  | 2016-05-03 |            5 |
+----------+------------+--------------+

正則表達式

%表示任意個數字符

_表示任意單個字符

查找所有以l(小寫L)開頭的寵物主人

select * from pet where owner like 'l%';

+----------+----------+---------+--------+------------+-------+
| owner    | petname  | species | gender | birth      | death |
+----------+----------+---------+--------+------------+-------+
| liqiang  | wangcai  | gou     | f      | 2016-03-04 | NULL  |
| liuqiang | dongdong | gou     | m      | 2016-05-03 | NULL  |
| liyue    | tangyuan | mao     | f      | 2015-02-09 | NULL  |
| liqiang  | caiwang  | mao     | m      | 2016-05-03 | NULL  |
+----------+----------+---------+--------+------------+-------+

查找所有以ng結尾的寵物主人

select * from pet where owner like '%ng';

+----------+----------+---------+--------+------------+-------+
| owner    | petname  | species | gender | birth      | death |
+----------+----------+---------+--------+------------+-------+
| liqiang  | wangcai  | gou     | f      | 2016-03-04 | NULL  |
| liuqiang | dongdong | gou     | m      | 2016-05-03 | NULL  |
| liqiang  | caiwang  | mao     | m      | 2016-05-03 | NULL  |
+----------+----------+---------+--------+------------+-------+

查找所有姓名中有i的寵物主人

select * from pet where owner like '%i%';

+----------+----------+---------+--------+------------+-------+
| owner    | petname  | species | gender | birth      | death |
+----------+----------+---------+--------+------------+-------+
| liqiang  | wangcai  | gou     | f      | 2016-03-04 | NULL  |
| liuqiang | dongdong | gou     | m      | 2016-05-03 | NULL  |
| liyue    | tangyuan | mao     | f      | 2015-02-09 | NULL  |
| liqiang  | caiwang  | mao     | m      | 2016-05-03 | NULL  |
+----------+----------+---------+--------+------------+-------+

查找姓名爲5個字的寵物主人

select * from pet where owner like '_____';

+-------+----------+---------+--------+------------+-------+
| owner | petname  | species | gender | birth      | death |
+-------+----------+---------+--------+------------+-------+
| liyue | tangyuan | mao     | f      | 2015-02-09 | NULL  |
+-------+----------+---------+--------+------------+-------+

擴展正則表達式

REGEXP()函數

^表示爲起始符

$表示爲結尾符

.匹配任意單個字符

.{x}代表x個任意字符

查找所有名字l開頭的寵物主人

select * from pet where regexp_like(owner,'^l');

+----------+----------+---------+--------+------------+-------+
| owner    | petname  | species | gender | birth      | death |
+----------+----------+---------+--------+------------+-------+
| liqiang  | wangcai  | gou     | f      | 2016-03-04 | NULL  |
| liuqiang | dongdong | gou     | m      | 2016-05-03 | NULL  |
| liyue    | tangyuan | mao     | f      | 2015-02-09 | NULL  |
| liqiang  | caiwang  | mao     | m      | 2016-05-03 | NULL  |
+----------+----------+---------+--------+------------+-------+

默認情況下,MySQL並不區分大小寫,所以可以通過一些選項來區分大小寫

SELECT * FROM pet WHERE REGEXP_LIKE(owner, '^l', 'c');
SELECT * FROM pet WHERE REGEXP_LIKE(owner, BINARY '^b');
SELECT * FROM pet WHERE REGEXP_LIKE(owner, '^l' COLLATE utf8mb4_0900_as_cs);

查找所有姓名以g結尾的寵物主

select * from pet where regexp_like(owner,'g$');
+----------+----------+---------+--------+------------+-------+
| owner    | petname  | species | gender | birth      | death |
+----------+----------+---------+--------+------------+-------+
| liqiang  | wangcai  | gou     | f      | 2016-03-04 | NULL  |
| liuqiang | dongdong | gou     | m      | 2016-05-03 | NULL  |
| liqiang  | caiwang  | mao     | m      | 2016-05-03 | NULL  |
+----------+----------+---------+--------+------------+-------+

查找所有姓名爲5個字的寵物主

select * from pet where regexp_like(owner,'^.....$');

+-------+----------+---------+--------+------------+-------+
| owner | petname  | species | gender | birth      | death |
+-------+----------+---------+--------+------------+-------+
| liyue | tangyuan | mao     | f      | 2015-02-09 | NULL  |
+-------+----------+---------+--------+------------+-------+
select * from pet where regexp_like(owner,'^.{5}$');

+-------+----------+---------+--------+------------+-------+
| owner | petname  | species | gender | birth      | death |
+-------+----------+---------+--------+------------+-------+
| liyue | tangyuan | mao     | f      | 2015-02-09 | NULL  |
+-------+----------+---------+--------+------------+-------+

行計數

統計pet表中的行數量

select count(*) from pet;

+----------+
| count(*) |
+----------+
|        6 |
+----------+

統計每個主人有多少個寵物

select owner,count(*) from pet group by owner;

+--------+----------+
| owner  | count(*) |
+--------+----------+
| Harold |        2 |
| Gwen   |        3 |
| Benny  |        2 |
| Diane  |        1 |
+--------+----------+

統計每種動物的數量

select species,count(*) from pet group by species;

+---------+----------+
| species | count(*) |
+---------+----------+
| bird    |        2 |
| snake   |        1 |
| cat     |        2 |
| dog     |        3 |
+---------+----------+

每種性別數量

select sex,count(*) from pet group by sex;

+------+----------+
| sex  | count(*) |
+------+----------+
| F    |        4 |
| NULL |        1 |
| m    |        3 |
+------+----------+

每個物種與性別組合的數量

select species,sex,count(*) from pet group by species,sex;;

+---------+------+----------+
| species | sex  | count(*) |
+---------+------+----------+
| bird    | F    |        1 |
| bird    | NULL |        1 |
| snake   | m    |        1 |
| cat     | m    |        1 |
| dog     | F    |        2 |
| dog     | m    |        1 |
| cat     | F    |        1 |
+---------+------+----------+

統計貓狗各種性別的數量

select species,sex,count(*) from pet where species = 'dog' or species = 'cat' group by species,sex;

+---------+------+----------+
| species | sex  | count(*) |
+---------+------+----------+
| cat     | m    |        1 |
| dog     | F    |        2 |
| dog     | m    |        1 |
| cat     | F    |        1 |
+---------+------+----------+

只統計已知性別的動物數量

select species,sex,count(*) from pet where sex is not null group by species,sex;

+---------+------+----------+
| species | sex  | count(*) |
+---------+------+----------+
| bird    | F    |        1 |
| snake   | m    |        1 |
| cat     | m    |        1 |
| dog     | F    |        2 |
| dog     | m    |        1 |
| cat     | F    |        1 |
+---------+------+----------+

多表查詢

創建新表並插入數據

CREATE TABLE event (name VARCHAR(20), date DATE,type VARCHAR(15), remark VARCHAR(255));

insert into event values('Fluffy','1995-05-15','litter','4 kittens, 3 female, 1 male');
insert into event values('Buffy','1993-06-23','litter','5 puppies, 2 female, 3 male');
insert into event values('Buffy','1994-06-19','litter','3 puppies, 3 female');
insert into event values('Chirpy','1999-03-21','vet','needed beak straightened');
insert into event values('Slim','1997-08-03','vet','broken rib');
insert into event values('Bowser','1991-10-12','kennel',NULL);
insert into event values('Fang','1991-10-12',NULL);
insert into event values('Fang','1998-08-28','birthday','Gave him a new chew toy');
insert into event values('Claws','1998-03-17','birthday','Gave him a new flea collar');
insert into event values('Whistler','1998-12-09','birthday','First birthday');

查看錶event

select * from event;

+----------+------------+----------+-----------------------------+
| name     | date       | type     | remark                      |
+----------+------------+----------+-----------------------------+
| Fluffy   | 1995-05-15 | litter   | 4 kittens, 3 female, 1 male |
| Buffy    | 1993-06-23 | litter   | 5 puppies, 2 female, 3 male |
| Buffy    | 1994-06-19 | litter   | 3 puppies, 3 female         |
| Chirpy   | 1999-03-21 | vet      | needed beak straightened    |
| Slim     | 1997-08-03 | vet      | broken rib                  |
| Bowser   | 1991-10-12 | kennel   | NULL                        |
| Fang     | 1991-10-12 | kennel   | NULL                        |
| Fang     | 1998-08-28 | birthday | Gave him a new chew toy     |
| Claws    | 1998-03-17 | birthday | Gave him a new flea collar  |
| Whistler | 1998-12-09 | birthday | First birthday              |
+----------+------------+----------+-----------------------------+

使用多表查詢來獲取所有產仔的寵物姓名,及remark

select pet.name,timestampdiff(year,pet.birth,event.date) as age,remark from pet inner join event on pet.name = event.name where event.type = 'litter';

+--------+------+-----------------------------+
| name   | age  | remark                      |
+--------+------+-----------------------------+
| Buffy  |    5 | 3 puppies, 3 female         |
| Buffy  |    4 | 5 puppies, 2 female, 3 male |
| Fluffy |    2 | 4 kittens, 3 female, 1 male |
+--------+------+-----------------------------+

timestampdiff(year,pet.birth,event.date) as age:將pet.birth的日期作爲起始時間,event.date的日期作爲結束日期,以年爲單位計算差,將結果列入age列中

pet inner join event:將pet表與event表做內鏈接

on pet.name = event.name:兩表間的鏈接條件,要求pet.name的值與event.name的值相等才匹配

where event.type = 'littler':查找event.type列爲litter

關於左鏈接,右鏈接,內鏈接的詳細講解在這裏

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