您的位置:首页 > 数据库

SQL查询之基础(语法和概念)完整版

2006-05-26 21:18 721 查看
注:下面的内容都是再SQLServer2000的查询分析器里面执行的,--是注释

大家可以把下面的内容保存为后缀名为sql的文本文件,然后在SQLServer2000的查询分析器里打开,

因为这篇文章主要说的是SQL的一些查询的语法和概念,所以有些查询可能一点现实意义都没有,只是为了说明查询的语法。至于有关一些数学基础可以看前两天的《数据库之关系代数(理论)》那篇文章,其它如果还想知道查询的过程中数据库到底是怎么操作的这类问题,大家还是参考参考别的书吧,等我研究下再贴出来,希望大家好好学习,天天向上,我也是,每天好好学习了!!

文件内容:

--显示所有列
--select * from Employees;

--按顺序显示某些列
--select EmployeeID,LastName,FirstName,BirthDate from Employees;

--指定列的别名(两种方式)
-- select EmployeeID as 员工编号,BirthDate as 生日 from Employees;
-- select 员工编号=EmployeeID,生日=BirthDate from Employees;

--限制返回的行数
-- select top 5* from Employees;
-- select top 5 percent* from Employees;

--选择不同的列
--国家不同
-- select distinct Country as 国家 from Employees;
--国家和称呼至少一个不同
-- select distinct Country as 国家,TitleOfCourtesy as 称呼 from Employees;

--对查询的结果排序
/*
select EmployeeID as 员工编号, LastName+' '+FirstName as 员工姓名,BirthDate as 出生日期,City as 城市
from Employees
where City='London' order by BirthDate ;

--对不同的列采用不同的排序
select EmployeeID as 员工编号, LastName+' '+FirstName as 员工姓名,BirthDate as 出生日期,City as 城市
from Employees
where City='London' order by FirstName, BirthDate desc;
*/
--对查询的结果进行运算
--
-- use pubs;
-- select title as 书目,price as 单价,ytd_sales as 销售量,price*ytd_sales as 销售额 from titles;
--带有条件的查询
/* select EmployeeID as 员工编号, LastName+' '+FirstName as 员工姓名,BirthDate as 出生日期,City as 城市
from Employees
where City='London' ;

select EmployeeID as 员工编号, LastName+' '+FirstName as 员工姓名,BirthDate as 出生日期,City as 城市 ,Country as 国家
from Employees
where Country like 'US%';

select EmployeeID as 员工编号, LastName+' '+FirstName as 员工姓名,BirthDate as 出生日期,City as 城市 ,Country as 国家
from Employees
where Country in ('USA','UK');

--复杂的条件查询,注意逻辑关系,要加括号,计算机里面or的优先级比 and 高
select EmployeeID as 员工编号, LastName+' '+FirstName as 员工姓名,PostalCode as 邮编,Country as 国家
from Employees
where
(
PostalCode='98033'
or PostalCode='98122'
or PostalCode='SW1 8JR'
)
and Country='USA';

*/

--使用内连接查询
--查询产品表和供应商表,得到公司和公司相应的产品;
-- use Northwind;
/* select p.SupplierID as 供应商编号,s.CompanyName as 公司名称,p.ProductName as 产品名称,p.UnitPrice as 价格
from Products p, Suppliers s where p.SupplierID=s.SupplierID;
*/
--想要查询作者和作者写的书,发现两张表之间没有联系,但是表titleauthor连接了两张表,一般当两者之间关系是多对多时会采用第三张表,
/* use pubs;
select a.au_lname+' '+a.au_fname as 作者,t.title as 书名 from authors a,titles t,titleauthor ta
where a.au_id=ta.au_id and t.title_id=ta.title_id;

*/

--使用外连接
--左外连接,这里只介绍一下语法,其实下面的查询和上面的一样,因为Products表和Suppliers表的SupplierID是一一对应的,
/* use Northwind;
select p.SupplierID as 供应商编号,s.CompanyName as 公司名称,p.ProductName as 产品名称,p.UnitPrice as 价格
from Products p
left outer join Suppliers s
on p.SupplierID=s.SupplierID;
*/

--右外连接
/* use Northwind;
select p.SupplierID as 供应商编号,s.CompanyName as 公司名称,p.ProductName as 产品名称,p.UnitPrice as 价格
from Products p
right outer join Suppliers s
on p.SupplierID=s.SupplierID;
*/

--全外连接
/* use Northwind;
select p.SupplierID as 供应商编号,s.CompanyName as 公司名称,p.ProductName as 产品名称,p.UnitPrice as 价格
from Products p
full outer join Suppliers s
on p.SupplierID=s.SupplierID;
*/

/*
联合查询
  UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 合查询。
UNION的语法格式为: select_statement UNION [ALL] selectstatement [UNION [ALL] selectstatement][…n]
其中selectstatement为待联合的SELECT查询语句。 ALL选项表示将所有行合并到结果集合中。不指定该项时,
被联合查询结果集合中的重复行将只保留一行。
注:由于没有合适的例子,所以就不举例了,下次有了再告诉大伙
*/

/*
交叉查询
交叉连接 交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,
返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数
*/

/*
自连接
连接自身

*/

/*
子查询
其实子查询就是一次查询的结果作为下一次查询的输入
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: