創建數據庫
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
關於左鏈接,右鏈接,內鏈接的詳細講解在這裏