E-R图
导入准备好的SQL语句,E-R图如下,
数据库的表组成
- customers : 存储客户的数据。
- products : 存储汽车的数据。
- productLines : 存储产品类别数据。
- orders : 存储客户订购的销售订单。
- orderDetails : 存储每个销售订单的订单产品数据项。
- payments : 存储客户订单的付款数据信息。
- employees : 存储所有员工信息以及组织结构。
- offices : 存储销售处数据, 类似于各个分公司。
select 语句
select
column_1, column_2, ...
from
table_1
[INNER | LEFT |RIGHT] JOIN table_2 ON conditions
where
conditions
GROUP BY column_1
HAVING group_conditions
order by column_1
limit offset, length;
- select 之后是逗号分隔列或星号( * )的列表, 表示要返回所有列。
- from 指定要查询数据的表或视图。
- JOIN 根据某些连接条件从其他表中获取数据。
- where 过滤结果集中的行。
- GROUP BY 将一组行组合成小分组, 并对每个小分组应用聚合函数。
- HAVING 过滤器基于 GROUP BY 子句定义的小分组。
- order by 指定用于排序的列的列表。
- limit 限制返回行的数量。
--查询所有的员工信息
select * from employees;
--查询所有的员工姓名及工作
select firstname,lastname,jobtitle from employees;
--去掉lastname重复的数据,使用DISTINCT 子句,排重
select distinct lastname from employees;
select distinct lastname from employees order by lastname;
--如果不适用聚合函数,group by 也可以达到相同的效果
select distinct state from customers;
select state from customers group by state;
--distinct句和group by子句之间的区别是group by子句可对结果集进行排序,而distinct子句不进行排序
--null数据的处理
select state from customers;
select distinct state from customers;
--多列排重
select distinct state, city from customers where state is not null order by state , city;
--distinct和聚合函数
select count(distinct state) from customers where country = 'USA';
--distinct与limit子句
select distinct state from customers where state is not NULL limit 3;
--比较运算符的使用
select lastname, firstname, jobtitle from employees where jobtitle <> 'Sales Rep';
select lastname, firstname, officeCode from employees where officecode > 5;
select lastname, firstname, officeCode from employees where officecode <= 4;
常见的比较运算符
操作符 | 描述 |
---|---|
= | 等于, 几乎任何数据类型都可以使用它。 |
<> 或 != | 不等于 |
< | 小于, 通常使用数字和日期/时间数据类型。 |
> | 大于, |
<= | 小于或等于 |
>= | 大于或等于 |
运算符优先级
select true or false and false; --true;先and 后or
select (true or false) and false; --false
IN 操作符–和or的作用相似
(not in:取反面)
select officeCode, city, phone, country from offices where country in ('USA' , 'France');
select officeCode, city, phone, country from offices where country not in ('USA' , 'France');
IN 与子查询
--查找总金额大于 60000 的订单
select orderNumber, customerNumber, status, shippedDate from orders
where orderNumber in (
select orderNumber from orderDetails group by orderNumber having sum(quantityOrdered * priceEach) > 60000);