mysql学习
mysql安装
按照如下地址一步一步操作:https://zhuanlan.zhihu.com/p/37152572
mysql客户端navicat for mysql安装
按照如下地址一步一步操作:https://zhuanlan.zhihu.com/p/37155150
数据库(DB)
将大量的数据保存起来通过计算机加工而成的可以进行高效访问的数据集合;
关系型数据库(RDB)
采用由行和列组成的二维表来管理数据;
列
即垂直方向在关系数据库中称为字段代表保存在表中的数据项目;
行
即水平方向在关系数据库中称为记录,相当于一条数据;
主键
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组能唯一标识一条记录,该属性组就可以成为一个主键 ;
外键
用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如A表中的一个字段时B表的主键,那么他就可以是A表的外键主键
sql
是为数据库而开发的语言
mysql
即为关系数据库管理系统(RDBMS)
select from:查询语句
mysql> select *
-> from product;
±-----------±-------------±-------------±-----------±---------------±------------+
| product_id | product_name | product_type | sale_price | purchase_price | regist_date |
±-----------±-------------±-------------±-----------±---------------±------------+
| 0001 | T恤衫 | 衣服 | 1000 | 500 | 2009-09-20 |
| 0002 | 打孔器 | 办公用品 | 500 | 320 | 2009-09-11 |
| 0003 | 运动T恤 | 衣服 | 4000 | 2800 | NULL |
| 0004 | 菜刀 | 厨房用具 | 3000 | 2800 | 2009-09-20 |
| 0005 | 高压锅 | 厨房用具 | 6800 | 5000 | 2009-01-15 |
| 0006 | 叉子 | 厨房用具 | 500 | NULL | 2009-01-15 |
| 0007 | 擦菜板 | 厨房用具 | 880 | 790 | 2008-04-28 |
| 0008 | 圆珠笔 | 办公用品 | 100 | NULL | 2009-11-11 |
±-----------±-------------±-------------±-----------±---------------±------------+
8 rows in set
去重语句
distinct:删除选中字段的重复数据
mysql> select distinct product_type
-> from product;
±-------------+
| product_type |
±-------------+
| 衣服 |
| 办公用品 |
| 厨房用具 |
±-------------+
3 rows in set
前N个语句
mysql> select *
-> from product
-> limit 2,3;
±-----------±-------------±-------------±-----------±---------------±------------+
| product_id | product_name | product_type | sale_price | purchase_price | regist_date |
±-----------±-------------±-------------±-----------±---------------±------------+
| 0003 | 运动T恤 | 衣服 | 4000 | 2800 | NULL |
| 0004 | 菜刀 | 厨房用具 | 3000 | 2800 | 2009-09-20 |
| 0005 | 高压锅 | 厨房用具 | 6800 | 5000 | 2009-01-15 |
±-----------±-------------±-------------±-----------±---------------±------------+
3 rows in set
从第3条开始后面3条记录
case…end判断语句
select sum(case when product_type='衣服'
then sale_price else 0 end) as sum_price_clothes
from product;
可计算商品种类为衣服的销售单价
筛选语句where
筛选制动条件的记录
select *
from product
where product_type='衣服';
分组语句 group by
顾名思义就是将表进行分组
select product_type,count(*)
from product
group by product_type;
排序语句order by
将表按照指定顺序排序
降序
select *
from product
order by sale_price desc;
升序
select *
from product
order by sale_price asc;
函数
时间函数
当前日期
select current_date;
当前时间
select current_time;
当前日期和时间
select current_timestamp;
数值函数
+,-,*,/,abs(绝对值),mod(求余),round(四舍五入)
字符串函数
||(拼接),length(字符串长度),lower(小写转换),replace(字符串替换),upper(大写转换),substring(字符串截取)
sql注释
书写在"--"之后,只能写在同一行
书写在“/*”和“*/”之间,可以跨行
sql代码规范
以分号结尾
sql语句不区分大小写
常数的书写方式是固定的
单词需要用半角空格或者换行来分隔
项目一:查找重复的电子邮箱
创建 email表,并插入如下三行数据 ±—±--------+ | Id | Email | ±—±--------+ | 1 | [email protected] | | 2 | [email protected] | | 3 | [email protected] | ±—±--------+
编写一个 SQL 查询,查找 Email 表中所有重复的电子邮箱
创建表
create table email
(id integer not null,
Email varchar(225) not null,
primary key (id));
插入数据
start transaction;
insert into email values ('1','[email protected]');
insert into email values ('2','[email protected]');
insert into email values ('3','[email protected]');
查询
select Email
from email
group by Email
having count(Email)>1;
项目二:查找大国
创建如下 World 表 ±----------------±-----------±-----------±-------------±--------------+ | name | continent | area | population | gdp | ±----------------±-----------±-----------±-------------±--------------+ | Afghanistan | Asia | 652230 | 25500100 | 20343000 | | Albania | Europe | 28748 | 2831741 | 12960000 | | Algeria | Africa | 2381741 | 37100000 | 188681000 | | Andorra | Europe | 468 | 78115 | 3712000 | | Angola | Africa | 1246700 | 20609294 | 100990000 | ±----------------±-----------±-----------±-------------±--------------+ 如果一个国家的面积超过300万平方公里,或者(人口超过2500万并且gdp超过2000万),那么这个国家就是大国家。 编写一个SQL查询,输出表中所有大国家的名称、人口和面积。
创建表
CREATE TABLE World
( name VARCHAR(50) NOT NULL,
continent VARCHAR(50) NOT NULL,
area INT NOT NULL,
population INT NOT NULL,
gdp INT NOT NULL );
插入数据
INSERT INTO World VALUES('Afghanistan','Asia',652230,25500100,20343000);
INSERT INTO World VALUES('Albania','Europe',28748,2831741,12960000);
INSERT INTO World VALUES('Algeria','Africa',2381741,37100000,188681000);
INSERT INTO World VALUES('Andorra','Europe',468,78115,3712000);
INSERT INTO World VALUES('Angola','Africa',1246700,20609294,100990000);
查询
select name,population,area
from World
where area>3000000 or (population>25000000 and gdp>20000000);