这是第二次打卡做业了,这一次的主要内容是基础的SQL语句,可是有个概念咱们要搞清楚,就是什么是SQL、什么是MySQL。如下的语句都是基于MySQL。数据库
SQL是Structured Query Language的缩写,中文叫作结构化查询语言,是专门用来操做数据库的。编程
MySQL是一款数据库软件,固然,站在语言的角度也是一门语言,是遵循SQL的一些准则便携的语言实例。SQL是标准,而MySQL是具体的实现。bash
SElECT查询语句能够说会是数据库中使用最多的语句了。他能够查询数据表中的内容。若是你想要从数据库中查询某个信息,你最少须要提供两个信息。编程语言
SELECT name
FROM student
复制代码
上面的这条语句就是从student表中检索一个字段名为name的列。这是最简单的用法,SELECT语句还有不少子语句,咱们会在下面介绍。固然,你也能够查询多个列,就像下面这个样子,字段名的中间使用逗号隔开就好。固然,你也可使用*号,来返回全部的列。函数
SELECT id,
name,
sex
FROM student
复制代码
咱们使用上面的查询语句会有一个很重要的问题,就是他会将全部的查询结果返回给咱们,可是也许咱们只是想要不一样的那一部分。这时,咱们可使用DISTINCT关键字,将它放在相应的字段名前便可ui
SELECT DISTINCT id,
FROM products
复制代码
这样的话就会将不一样的id帮你检索出来,还有一个很重要的问题,即是若是DISTINCT后面跟了多个字段名,那么这两个字段都会起做用,也就是说除非两行的这两个字段是如出一辙的,不然就会被检索出来。spa
有些时候咱们指望检索从某个位置开始,返回这以后匹配到的指定数量的数据,这时即是限制结果起做用的时候了。code
SELECT name
FROM products
LIMIT 5;
复制代码
上面的语句即是告诉数据库只返回检索到的5个数据,limit子语句还有一个关键字,容许告诉数据库从距离起始位置多少个数量的地方开始检索数据cdn
SELECT name
FROM products
LIMIT 5 OFFSET 5
复制代码
上面的语句就是告诉数据库从便宜起始位置5个数量的地方开始检索,而且检索的数据量不超过5个。也可使用简写的方式,LIMIT 5,5;blog
上面咱们已经看了基本的SELECT语句了,可是上面的没法知足咱们更多的需求,咱们使用数据库查询数据更多的时候是须要提供一些条件的,这时咱们便须要用到WHERE子语句。例如咱们从学生表中查询学号为10的学生名
SELECT name
FROM student
WHERE id = 10;
复制代码
最下面的WHERE语句后面跟的是条件,固然咱们也能够复合,使用AND、OR操做符(能够想象成编程语言的&&、||操做符)
SELECT name
FROM student
WHERE age < 18 AND sex = female;
复制代码
上面的查询语句表示要查询年龄小于18岁,而且性别为男性的学生。
SELECT name
FROM student
WHERE age < 18 OR age >20;
复制代码
上面的查询语句表示要查询年龄小于18岁,或者年龄大于20岁的学生。
使用BETWEEN AND操做符能够将某个条件限定在必定范围以内,咱们能够将上面的查询在18到20岁年龄区间的改成使用BETWEEN AND查询
SELECT name
FROM student
WHERE age BETWEEN 18 AND 20;
复制代码
还有一些简答的单个操做符就再也不一一介绍了,具体能够去查相关文档
当咱们有了咱们想要数据,咱们仍是不知足,返回来一大堆数据,毫无顺序可言,这怎么看,这是ORDER BY排序语句就登场了。ORDER BY能够按照升降序排列。默认是升序,想要使用降序时可使用DESC关键字
SELECT name
FROM products
ORDER BY name;
复制代码
这样的话就会按照name字段的字典顺序排列,若是想要变为降序,只需在ORDER BY的语句后面添加DESC。
SELECT name
FROM products
ORDER BY name DESC;
复制代码
还有能够按照多个列排序
SELECT id, price, name
FROM products
ORDER BY price, name;
复制代码
上面的例子就是按照多个列排序,这里问题是只有第一个排序条件相同时第二个才会起做用。
咱们直接看一个例子
SELECT id, COUNT(*) AS count
FROM products
GROUP BY id;
--结果
id count
BRS01 3
DLL01 4
FNG01 2
复制代码
上面的例子返回的结果有两个列,其中第一列为id,第二列为第一列id的数量,实际上是GROUP BY帮咱们根据id分了组,而后再每一个组各自计算的数量。有个一个须要注意的地方,GROUP BY子句必须出如今WHERE子句以后,ORDER BY子句以前
依然是来看例子
SELECT id, COUNT(*) AS count
FROM orders
GROUP BY id
HAVING COUNT(*) >= 2;
复制代码
上面的语句基本与上一个例子相同,只是最后一行多了HAVING子句,表示查询分组以后的数据中数量大于2的分组
函数有日期处理函数、熟知处理函数、字符处理函数、聚合函数,咱们就来看看应该是使用最多的的聚合函数的用法吧
--平均值函数
SELECT AVG(price) AS avg_price
FROM products;
--总数函数
SELECT COUNT(*) AS cust
FROM products;
--最大值函数
SELECT MAX(price) AS max_price
FROM products;
--最小值函数
SELECT MIN(price) AS min_price
FROM products;
-- 求和函数
SELECT SUM(quantity) AS items_ordered
FROM orderItems
WHERE order_num = 20005;
复制代码
第一步:建立数据表&插入数据
CREATE DATABASE test;
USE test;
CREATE TABLE if NOT EXISTS email(
ID INT NOT NULL PRIMARY KEY,
Email VARCHAR(255)
);
INSERT INTO email VALUES('1','a@b.com');
INSERT INTO email VALUES('2','c@d.com');
INSERT INTO email VALUES('3','a@b.com');
复制代码
第二步:查询数据
SELECT Email
FROM email
GROUP BY Email
HAVING COUNT(*) >=2;
复制代码
结果图:
第一步:建立数据表&插入数据
CREATE TABLE if not exists 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);
复制代码
结果图: