数据库SQL Server2012笔记(四)——多表查询、子查询、分页查询、用查询结果创建新表和外连接

1、多表查询

1)笛卡尔集:

  • select  *  from  表名1,表名2
  • select  *  from  表名1,表名2  where   表名1.字段名=表名2.字段名

注:

  • 若有两张表有相同名字的字段,则使用时需带表名(别名)。
  • order  by  置于where 条件之后。

2)自连接:同一张表的连接查询,将一张表视为两张表或多张表。

eg:显示公司每个员工名字和他的上级的名字。将emp表看做两张表worker和boss

  • select  worker.ename  雇员,boss.ename  老板   from   emp  worker,emp  boss  where   worker.mgr=boss.empno

2、子查询(嵌套查询):嵌入在其它sql语句中的select语句。

1)单行子查询:只返回一行数据的子查询语句。

2)多行子查询:返回多行数据的子查询。

3)在from子句中使用子查询。

说明:

当在from子句中使用子查询时,该子查询会被作为一个视图(临时表)来对待,因此也叫做内嵌视图。当在from子句中使用查询时,必须给子查询指定别名。

3、分页查询

1)top  n:前n条记录。

  • select  top  5  *  from  emp  order  by  hiredate
  • 显示第5个到第9个人的信息(按sal高低)
    • select  top  5   from  emp  where  empno  not  in  (select  top  4  empno  from  emp order  by  sal  desc)  order  by  sal  desc
  • identity(1,1):表示字段自增长,从“1”开始增长,每次加“1”。
    • create  table  test  (testId  int  primary  key  identity(1,1))

4、用查询结果创建新表

  • select  *  into  另一个表名  from  表名
  • 删除表中的重复记录
    • select  distinct  *  into  #temo(新表)  from  表名1
    • delete  from  表名1
    • insert  into  表名1  select  *  from  #temp
    • drop  table  #temp

5、外连接:

  • 左外连接:左边的表的记录全部显示,如果没有匹配的记录,用Null填补。
  • 右外连接:右边的表的记录全部显示,如果没有匹配的记录,用Null填补。
时间: 2024-08-24 11:56:35

数据库SQL Server2012笔记(四)——多表查询、子查询、分页查询、用查询结果创建新表和外连接的相关文章

数据库SQL Server2012笔记(七)——java 程序操作sql server

1.crud(增删改查)介绍:create/retrieve/update/delete 2.JDBC介绍 1)JDBC(java database connectivity,java数据库连接) 2)是一种用于运行SQL语句的java  API,可为多种关系数据库提供统一訪问.由一组用Java语言编写的类和接口组成. 3)JDBC为工具/数据库开发者提供了一个标准的API,据此可构建更高级的工具和接口,是数据库开发者可以用纯Java API编写数据库应用程序. 4)JDBC也是闪避表明. 3.

数据库SQL Server2012笔记(一)——简要介绍

1.目标: 1)使用企业管理器 2)使用查询分析器 2.文件保存数据的特点: 1)安全性问题 2)不利于数据的查询和管理 3)不利于存放海量数据 4)在程序中控制不方便 3.数据库 1)定义:按照数据结构来组织.存储和管理数据的仓库. 2)基本结构: 物理数据层 数据库的最内层 物理存储设备上实际存储的数据的集合. 原始数据:是用户加工的对象,由内部模式描述的指令操作处理的位串.字符和子组成. 概念数据层 数据库的中间一层,是数据库的整体逻辑表示. 指出了每个数据的逻辑定义和数据间的逻辑关系,是

Sql中根据旧表创建新表的SQL语句

今天在网上查了下,根据旧表创建新表的SQL语句,网上给了两个答案 create table tab_new like tab_old (使用旧表创建新表) create table tab_new as select col1,col2- from tab_old definition only 两个语句都试了一下,报错了. 正确的方法是 select * into newtable from oldtable; 如果不想导记录,只想生成表结构 :select * into newtable f

php大力力 [023节]CREATE TABLE创建新表sql写字段备注(2015-08-27)

2015-08-27 php大力力023.CREATE TABLE创建新表sql写字段备注 http://www.cnblogs.com/dalitongxue/p/4762182.html 参考: MySQL字段的说明和备注信息 http://blog.csdn.net/chelen_jak/article/details/45689139 DROP TABLE IF EXISTS test_table; CREATE TABLE test_table( Test_ID int NOT NUL

.net使用SqlBulkCopy导入数据(创建新表)

原文:.net使用SqlBulkCopy导入数据(创建新表) .net2.0后ado.net提供了一个快速导入sqlserver的方法sqlbulkcopy.导入效率非常高. 包装了一个简单的sqlbulkcopy类,用于数据从datatable导入到sqlserver.代码如下: /// <summary> /// 将DataTable写入数据库的表中 /// </summary> /// <param name="source">数据源DataT

postgresql----根据现有表创建新表

除普通的建表语句"create table table_name(columns);"之外,还可以根据现有表快速的创建新表: 一.使用create table ... (like ...)创建一个和原表结构相同的新表,根据INCLUDING保留原表的约束,索引等. create table table_name (like parent_table {INCLUDING|EXCLUDING}{DEFAULTS|CONSTRAINTS|INDEXES|STORAGE|COMMENTS|A

使用INTO子句创建新表

例子 USE StudentManagement GO SELECT Student_No,Student_Name,Student_Sex INTO #StudentTemp FROM Student GO SELECT *FROM #StudentTemp GO INTO子句可以自动创建一个新表并将查询结果集中的记录添加到该表中.新表的列由select子句中的目标列来决定.若新表名称已#开头,如上所示,则声成的新表为临时表,不带#的为永久表. 使用INTO子句创建新表

2.3 PostgreSQL 创建新表

你可以通过声明表的名字和所有字段的名字及其类型来创建表: CREATE TABLE weather ( city varchar(80), temp_lo int, -- 最低气温 temp_hi int, -- 最高气温 prcp real, -- 降水量 date date ); 你可以在 psql 里连换行符一起键入这些东西.psql 可以识别该命令直到分号才结束. 你可以在 SQL 命令中自由使用空白(空格/tab/换行符).这意味着你可以用和上面不同的对齐方式(甚至在同一行中)键入命令

mysql 每个月创建新表

1.CREATE DEFINER=`root`@`%` PROCEDURE `aa`()BEGIN SET @sqlstr = CONCAT('create table cdrpbx10_',DATE_FORMAT(CURDATE(),'%Y%m'),' like cdrpbx10');PREPARE stmt1 FROM @sqlstr ;EXECUTE stmt1 ;SET @sqlstr = CONCAT('insert into cdrpbx10_',DATE_FORMAT(CURDAT