首页 > 其他分享 >连接

连接

时间:2023-05-23 18:13:59浏览次数:25  
标签:customer JOIN name 连接 id order SELECT

内连接 INNER JOIN

内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。

{
SELECT order_id,o.customer_id,first_name,last_name
FROM orders o
JOIN customers c
	 ON o.customer_id = c.customer_id-- 也可 USING(customer_id)

---

SELECT order_id,oi.product_id,quantity,oi.unit_price
FROM order_items oi
JOIN products p
	 ON oi.product_id = p.product_id
}

跨数据库连接

{
USE sql_store;

SELECT *
FROM order_items oi
JOIN sql_inventory.products p
	 ON oi.product_id = p.product_id-- 跨数据库连接注意sql_inventory.
}

自连接

{
USE sql_hr;

SELECT 
	e.employee_id,
	e.first_name,
    m.first_name AS manager
FROM employees e
JOIN employees m
	 ON e.reports_to=m.employee_id-- 注意这里对employees表命了两个别名
}

多表连接

{
USE sql_store;

SELECT 
    o.order_id,
    o.order_date,
    c.first_name,
    c.last_name,
    os.name AS status
FROM orders o
JOIN customers c
	 ON o.customer_id=c.customer_id
JOIN order_statuses os
	 ON o.status=os.order_status_id
}

复合连接

{
USE sql_store;

SELECT *
FROM order_items oi
JOIN order_item_notes oin
	ON oi.order_id=oin.order_id
	AND oi.product_id=oin.product_id-- 多条件情况下的连接
}

隐式连接

{
SELECT *
FROM orders o
JOIN customers c
	ON o.customer_id=c.customer_id

---

SELECT *
FROM orders o,customers c
WHERE o.customer_id=c.customer_id
-- 后者为隐式连接,两者等价,但是隐式连接中,如果忘记了WHERE,其不会报错,但是会输出交差连接。
}

外连接 OUTER JOIN(LEFT/RIGHT JOIN)

{
SELECT
    c.customer_id,
    c.first_name,
    o.order_id
FROM customers c
LEFT JOIN orders o
	ON c.customer_id=o.customer_id 
ORDER BY c.customer_id
-- 注意左连接和右连接中的左和右是相对位置。LEFT JOIN中,相对位置上左表为customers,连接右表orders
-- 左向外联接的结果集包括 LEFT OUTER JOIN子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值NULL。 

---

SELECT
    c.customer_id,
    c.first_name,
    o.order_id
FROM orders o
RIGHT JOIN customers c
	ON c.customer_id=o.customer_id 
ORDER BY c.customer_id
-- 两者返回结果一样,尽量使用左连接,防止左右连接杂糅程序难读
}

多表外连接

{
SELECT
    c.customer_id,
    c.first_name,
    o.order_id,
    sh.name AS shipper
FROM customers c
LEFT JOIN orders o
	ON c.customer_id=o.customer_id
LEFT JOIN shippers sh
	ON o.shipper_id = sh.shipper_id
ORDER BY c.customer_id

---

SELECT
    o.order_date,
    o.order_id,
    c.first_name,
    sh.name AS shipper,
    os.name AS status
FROM orders o
JOIN customers c
	ON c.customer_id=o.customer_id 
LEFT JOIN shippers sh
	ON sh.shipper_id=o.shipper_id
JOIN order_statuses os
	ON o.status = os.order_status_id
ORDER BY status
}

自外连接

{
USE sql_hr;

SELECT
    e.employee_id,
    e.first_name,
    m.first_name AS manager
FROM employees e
LEFT JOIN employees m
	ON  e.reports_to= m.employee_id -- 注意这里对employees表命了两个别名e m
}

USING

{
SELECT
    o.order_id,
    c.first_name
FROM orders o
JOIN customers c
	USING (customer_id) -- ON o.customer_id=c.customer_id
JOIN shippers sh
	USING (shipper_id)
-- USING关键字只能在不同表中列名字完全一致的情况下使用

---

SELECT *
FROM order_items oi
JOIN order_item_notes oin
	USING (order_id, product_id)

---

SELECT
    p.date,
    c.name AS client,
    p.amount,
    pm.name
FROM payments p
JOIN clients c
	USING (client_id)
JOIN payment_methods pm
	ON p.payment_method=pm.payment_method_id
}

自然连接

系统会自己选择连接,可能出现意想不到的结果,不建议使用

{
SELECT
    o.order_id,
    c.first_name
FROM orders o
NATURAL JOIN customers c
}

交叉连接 CROSS JOIN

一般用来返回连接表的笛卡尔积。交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。

{
SELECT
    c.first_name AS customer,
    p.name AS product
FROM customers c
CROSS JOIN products p
ORDER BY c.first_name-- 用于如小中大型号的、红黄蓝颜色的各种商品
}

合并 UNION

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

{
SELECT
    order_id,
    order_date,
    'Actice' AS status
FROM orders
WHERE order_date >= '2019-01-01'
UNION-- UNION与UNION ALL 都是行合并,前者去重,后者不去重,会全部罗列出来。
SELECT
    order_id,
    order_date,
    'Archived' AS status
FROM orders
WHERE order_date < '2019-01-01'-- 通过UNION合并多个查询结果

---

SELECT name
FROM shippers
UNION
SELECT first_name
FROM customers-- 第一段查询决定了列名,这里列名是name而不会是first_name
}

标签:customer,JOIN,name,连接,id,order,SELECT
From: https://www.cnblogs.com/ganwong/p/17426008.html

相关文章

  • .NET中SQL Server数据库连接方法
    1. 使用本机上的SQLServerExpress实例上的用户实例。     用户实例的连接创建了一个新的SQLServer实例。此连接只能是在本地SQLServer2005实例上并且是通过命名管的windows验证连接才有效。目的就是为了给用户创建一个完全权限的SqlServer实例和有限的计算机管理员......
  • 什么是Socket连接?与TCP连接有什么关系?
    什么是Socket连接?它与TCP连接有什么关系?计算机网络是我们日常生活中不可或缺的一部分,而Socket连接则是网络通信中必不可少的一种机制。Socket是应用层与TCP/IP协议簇通信的中间软件抽象层,它是一组接口。Socket连接是计算机网络中的一种通信机制,它允许两个程序在不同计算机上通过......
  • SpringBoot声明连接多个redis数据源配置模版
    在实际开发中,我们可能会用到2个不同的redis数据源;如何连接查询详情:文章目录一、依赖二、配置文件三、config类配置四、序列化问题五、封装工具类一、依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-dat......
  • js 连接数据库 提示:ActiveXObject is not defined
    ActiveXObjectisnotdefined最近比较闲,上班瞎捣鼓一下,没想到报错了,提示ActiveXObjectisnotdefined大概是在js连接数据库时new对象使用的是ActiveXObject完事儿使用的浏览器是edge,但是在ie就没有问题,那么估计就是浏览器的设置问题点开edge的设置然后在默认浏览器的侧栏......
  • IIS/如何查看IIS上部署网站的实时连接数
    我们在IIS发布的Web网站,如何查看网站实时的连接数呢?1、首先打开运行框,输入perfmon.msc  2、打开监视工具-->性能监视器  3、点击“+”号,添加计数项WebService/CurrentConnections  4、可以查看到网站的实时连接数(线条颜色、粗细可以修改)  PS:本人IIS网站......
  • 使用SecureCRT7.2.3远程连接CentOS7
    连接名称: 可以填服务器IP, 协议默认SSH2主机名: 可以填服务器IP, 用户名可填root终端->反空闲, 勾选发送协议NO-OP, 第30秒外观: 配色方案改传统, 字体可选黑体, 字号大一些, 字符编码选择UTF-8另外连接时输入命令->ipaddr  可用于查看IP地址; exit 命令用于......
  • Yii2连接多个数据库
    1、使用高级模板yii2-app-advanced2、设置common\config\main-local.php本地文件'components'=>['db'=>['class'=>'yii\db\Connection','dsn'=>'mysql:host=local......
  • 通过java.sql.DriverManager获取多数据源连接
    importlombok.Data;importlombok.SneakyThrows;importorg.springframework.util.StringUtils;importjava.sql.Connection;importjava.sql.Driver;importjava.sql.DriverManager;publicclassJdbcDriverManger{@SneakyThrowspublicstaticConnecti......
  • 使用ln命令在Linux系统中创建连接文件
    在Linux中ln命令用来为文件创建连接,连接类型分为硬连接(HardLink)和符号连接(SymbolicLink)两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。关于软硬连接解释硬连接硬连接是指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是......
  • openEuler设置ip连接ssh
    方法一:使用dhcp动态ip,改下面两个参数。BOOTPROTO=dhcpONBOOT=yes方法二,直接使用静态P,需要该两个参数:BOOTPROTO=staticONBOOT=yes然后在文末加上ip地址,例如1PADDR=192.168.79.135NETMAST=255.255.255.0GATEWAY=192.168.79.2//用netstat-rn查看,0.0.0.0那行就是DNS1=8.8.8.8DNS2......