SQL简明实例教程
来源:互联网 发布:linux 中单引号的作用 编辑:程序博客网 时间:2024/06/11 00:06
创建客户customer表
CREATE TABLE `customer` ( `id` int(11) NOT NULL AUTO_INCREMENT, `LastName` char(50) DEFAULT NULL, `FirstName` char(50) DEFAULT NULL, `address` char(50) DEFAULT NULL, `city` char(50) DEFAULT NULL, `county` char(50) DEFAULT NULL, `phone` char(20) DEFAULT NULL, PRIMARY KEY (`id`));
创建供应商Supplier表
CREATE TABLE `Supplier` ( `id` int(11) NOT NULL AUTO_INCREMENT, `CompanyName` char(50) DEFAULT NULL, `ContactName` char(50) DEFAULT NULL, `city` char(50) DEFAULT NULL, `county` char(50) DEFAULT NULL, `Phone` char(20) DEFAULT NULL, `Fax` char(20) DEFAULT NULL, PRIMARY KEY (`id`));
创建订单表orders
CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `OrderDate` datetime DEFAULT NULL, `OrderNumber` char(30) NOT NULL, `CustomerId` int(11) NOT NULL, `TotalAmount` int(11) NOT NULL, PRIMARY KEY (`id`));
列出所有订单详情(OrderNumber, TotalAmount, FirstName, LastName, City, Country)
创建订单项表 orderitem
CREATE TABLE `orderitem` ( `id` int(11) NOT NULL AUTO_INCREMENT, `OrderId` int(11) NOT NULL, `ProductId` int(11) NOT NULL, `UnitPrice` float NOT NULL, `Quantity` int(11) NOT NULL, PRIMARY KEY (`id`));
创建Product表
CREATE TABLE `product2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ProductName` char(100) NOT NULL, `SupplierId` int(11) NOT NULL, `UnitPrice` float NOT NULL, `Package` int(11) NOT NULL, `IsDiscontinued` tinyint(4) NOT NULL COMMENT '是否下架', PRIMARY KEY (`id`));
从orders、orderitem、Product三个表中查询OrderNumber、ProductName、UnitPrice、Quantity
SELECT O.OrderNumber as 订单号, O.OrderDate AS 订购日期, P.ProductName AS 物品名称, I.Quantity as 购买数量, I.UnitPrice as 单价FROM ORDERS OJOIN OrderItem I ON O.Id = I.OrderId -- JOIN 即 INNER JOINJOIN Product P ON P.Id = I.ProductIdORDER BY O.OrderNumber
列出第一个(左边的)表的所有记录对应的第二个(右边的)表信息
例如,列出所有人的订单信息
SELECT c.FirstName, c.LastName, c.City, c.Country, o.OrderNumber, o.TotalAmountFROM Customer C -- Customer表中的每一个人LEFT JOIN Orders O -- Orders就是每一个人对应的订单信息ON O.CustomerId = C.Id -- Customer 与 Orders的 联系ORDER BY -- 排序 TotalAmount
LEFT JOIN和RIGHT JOIN的区别和联系
任何RIGHT JOIN都可以换成LEFT JOIN的写法,反之亦然。
例如,下面两种写法的查询结果是等价的:
-- LEFT JOINSELECT TotalAmount, FirstName, LastName, City, CountryFROM Customer CLEFT JOIN orders O ON O.CustomerId = C.IdWHERE TotalAmount IS NULL;-- RIGHT JOINSELECT TotalAmount, FirstName, LastName, City, CountryFROM orders ORIGHT JOIN Customer C ON O.CustomerId = C.IdWHERE TotalAmount IS NULL;
FULL JOIN
例如,如何查询各个国家的所有客户和供应商?
分析:
1. 查询各个国家,需要按国家排序
2. 查询客户和供应商,需要从Customer表和Supplier表中查询;
3. 查询所有客户和所有供应商,需要使用FULL JOIN;
SELECT C.FirstName, C.LastName, C.Country AS CustomerCountry, S.Country AS SupplierCountry, S.CompanyName FROM Customer C FULL JOIN Supplier S ON C.Country = S.Country ORDER BY C.Country, S.Country;
总结:
如果需要从两个表中查询指定的字段信息,可以使用JOIN;
如果同时查询所有客户对应的供应商信息,可以用FROM Customer LEFT JOIN Supplier;
如果同时查询所有供应商对应的客户信息,可以用FROM Customer RIGHT JOIN Supplier;
如果同时查询所有客户和所有供应商的信息,可以用FROM Customer FULL JOIN SupplierSupplier;
有些数据库不支持FULL JOIN,例如MySQL,不过在MySQL中可以使用LEFT JOIN + UNION + RIGHT JOIN 实现类似FULL JOIN的功能,例如上述例子如果在 MySQL中可以这样写:
SELECT C.FirstName, C.LastName, C.Country AS CustomerCountry, S.Country AS SupplierCountry, S.CompanyName FROM Customer C LEFT JOIN Supplier S ON C.Country = S.CountryUNION SELECT C.FirstName, C.LastName, C.Country AS CustomerCountry, S.Country AS SupplierCountry, S.CompanyName FROM Customer C RIGHT JOIN Supplier S ON C.Country = S.Country ORDER BY SupplierCountry,CustomerCountry;
阅读全文
6 0
- SQL简明实例教程
- flash读取xml简明实例教程
- xpath简明实例教程(简化版)
- SQL的简单查询实例教程
- SQL的简单查询实例教程
- vi(vim)入门简明实例教程---总览全局 快速入门
- vi(vim)入门简明实例教程---总览全局 快速入门
- 简明常用sql命令
- 简明常用sql命令
- SQL完全简明手册
- SQL完全简明手册
- SQL教程简明教程
- SQL简明笔记上
- 简明SQL初级教程
- 《Oracle数据库SQL和PL_SQL实例教程》文摘
- SQL完全简明手册 (zz)
- ≡SQL简明教程≡
- SQL Server 技术简明总结
- [CF600E]Lomsat gelral
- Ubuntu下用apt-get安装最新版本的Redis
- CreateProcess
- 通过MyEclipse 9.0对Liferay6.1.2进行编译与部署
- 安卓仿手机网易新闻app项目开发系列之(二)轮播图显示和RecyclerView适配器编写
- SQL简明实例教程
- Vlan使用--------2
- 学习笔记---高等数学前置知识---数列、排列组合、解不等式
- 接口interface
- Android本地数据安全问题,常用加密简单汇总,网上搜集的资料,方便查看
- Python递归函数
- 支付宝转账又出新方法:悬浮条自动识别输入,避免失误尴尬
- CSDN第一篇博客
- PL/SQL(三):复合数据类型