一个很基础的SQL查询语句

2024-05-04 05:02

1. 一个很基础的SQL查询语句

这个是SQLSERVER的查询
方括号在此处并不是必须的,方括号一般是用来括用户表中涉及的数据库的保留字的。比如USER, ID等等之类的SQLSERVER的保留字。因为数据库本身有这些关键字,而用户创建自己的表时,又创建了这些字段,使用的时候,就需要把用户表的这些名字的字段用方括号括起来,其他的时候不是必要的。
select * from master.dbo.spt_monitor
master表示数据库名,dbo是数据库用户,spt_monitor是用户下的表结构。
这个语句就是查询master库中,dbo用户下的spt_monitor表的数据。
而不使用前缀,select * from spt_monitor,对比上面,缺少了数据库的指定,缺少了用户名。
这就需要你当前执行连接的数据库是master库才可以,而且登陆的用户具备操作spt_monitor的权限。而上一个语句,指定了数据库,所以是可以跨库操作的。比如当前连接数据库为northwind数据库,第一个select * from master.dbo.spt_monitor因为指定了明确的数据库,所以不会报错,可是select * from spt_monitor,因为spt_monitor不属于库northwind,所以会报错,找不到表。

一个很基础的SQL查询语句

2. SQL数据库查询语句,包括增,删,改,查等所有语句详细。

一、增:有4种方法
  1.使用insert插入单行数据:
                   语法:insert [into]  [列名] values 
     例:insert into Strdents (姓名,性别,出生日期) values ('开心朋朋','男','1980/6/15')
     注意:into可以省略;列名列值用逗号分开;列值用单引号因上;如果省略表名,将依次插入所有列
  2.使用insert select语句将现有表中的数据添加到已有的新表中
                   语法:insert into  
                      select  from 
     例:insert into tongxunlu ('姓名','地址','电子邮件')
                     select name,address,email
                     from Strdents
                   注意:into不可省略;查询得到的数据个数、顺序、数据类型等,必须与插入的项保持一致
  3.使用select into语句将现有表中的数据添加到新建表中
                   语法:select  into  from 
     例:select name,address,email into tongxunlu from strdents
     注意:新表是在执行查询语句的时候创建的,不能够预先存在
     在新表中插入标识列(关键字‘identity’):
     语法:select identity (数据类型,标识种子,标识增长量) AS 列名
                      into 新表 from 原表名
     例:select identity(int,1,1) as 标识列,dengluid,password into tongxunlu from Struents
     注意:关键字‘identity’
  4.使用union关键字合并数据进行插入多行
     语法:insert   select  tnion select 
     例:insert Students (姓名,性别,出生日期)
                     select '开心朋朋','男','1980/6/15' union(union表示下一行)
                     select '蓝色小明','男','19**/**/**'
                   注意:插入的列值必须和插入的列名个数、顺序、数据类型一致
二、删:有2中方法
  1.使用delete删除数据某些数据
                  语法:delete from  [where ]
     例:delete from a where name='开心朋朋'(删除表a中列值为开心朋朋的行)
                  注意:删除整行不是删除单个字段,所以在delete后面不能出现字段名
  2.使用truncate table 删除整个表的数据
                  语法:truncate table 
     例:truncate table tongxunlu 
     注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能用语有外建约束引用的表
三、改
  使用update更新修改数据
                 语法:update  set  [where ]
     例:update tongxunlu set 年龄=18 where 姓名='蓝色小名'
     注意:set后面可以紧随多个数据列的更新值;where子句是可选的,用来限制条件,如果不选则整个表的所有行都被更新
四、查
  1.普通查询
     语法:select  from  [where ] [order by [asc或desc]]
   1).查询所有数据行和列
    例:select * from a
    说明:查询a表中所有行和列
   2).查询部分行列--条件查询
    例:select i,j,k             from             a             where f=5
    说明:查询表a中f=5的所有行,并显示i,j,k3列
   3).在查询中使用AS更改列名
    例:select name as 姓名 from a whrer xingbie='男'
    说明:查询a表中性别为男的所有行,显示name列,并将name列改名为(姓名)显示
   4).查询空行
    例:select name from a where email is null
    说明:查询表a中email为空的所有行,并显示name列;SQL语句中用is null或者is not null来判断是否为空行
   5).在查询中使用常量
    例:select name '唐山' as 地址 from a
    说明:查询表a,显示name列,并添加地址列,其列值都为'唐山'
   6).查询返回限制行数(关键字:top           percent)
    例1:select top 6 name from a
    说明:查询表a,显示列name的前6行,top为关键字
    例2:select top 60 percent name from a
    说明:查询表a,显示列name的60%,percent为关键字
   7).查询排序(关键字:order by , asc , desc)
    例:select name 
      from a 
      where chengji>=60 
      order by desc
    说明:查询表中chengji大于等于60的所有行,并按降序显示name列;默认为ASC升序
  2.模糊查询
   1).使用like进行模糊查询
    注意:like运算副只用语字符串,所以仅与char和varchar数据类型联合使用
    例:select * from a where name like '赵%'
    说明:查询显示表a中,name字段第一个字为赵的记录
   2).使用between在某个范围内进行查询
    例:select * from a where nianling between 18 and 20
    说明:查询显示表a中nianling在18到20之间的记录
   3).使用in在列举值内进行查询
    例:select name from a where address in ('北京','上海','唐山')
    说明:查询表a中address值为北京或者上海或者唐山的记录,显示name字段
  3.分组查询
   1).使用group by进行分组查询
    例:select studentID as 学员编号,         AVG(score) as 平均成绩  (注释:这里的score是列名)
      from score (注释:这里的score是表名)
      group by studentID
    说明:在表score中查询,按strdentID字段分组,显示strdentID字段和score字段的平均值;select语句中只允许被分组的列和为每个分组返回的一个值的表达试,例如用一个列名作为参数的聚合函数
   2).使用having子句进行分组筛选
    例:select studentID as 学员编号,         AVG(score) as 平均成绩 (注释:这里的score是列名)
      from score (注释:这里的score是表名)
      group by studentID
      having count(score)>1
    说明:接上面例子,显示分组后count(score)>1的行,由于where只能在没有分组时使用,分组后只能使用having来限制条件,
  4.多表联接查询
   1).内联接
    ①在where子句中指定联接条件
    例:select a.name,b.chengji
      from a,b
      where a.name=b.name
    说明:查询表a和表b中name字段相等的记录,并显示表a中的name字段和表b中的chengji字段
    ②在from子句中使用join…on
     例:select a.name,b.chengji
       from a inner join b
       on (a.name=b.name)
     说明:同上
   2).外联接
    ①左外联接查询
     例:select s.name,c.courseID,c.score
       from strdents as s
       left outer join score as c
       on s.scode=c.strdentID
     说明:在strdents表和score表中查询满足on条件的行,条件为score表的strdentID与strdents表中的sconde相同
    ②右外联接查询 
     例:select s.name,c.courseID,c.score
       from strdents as s
       right outer join score as c
       on s.scode=c.strdentID
     说明:在strdents表和score表中查询满足on条件的行,条件为strdents表中的sconde与score表的strdentID相同

3. 数据库基础篇(二)—— SQL之数据查询

 接下来,我们将使用员工相关的四张样本数据表,来学习SQL,建议你在学习过程中多动手练习,理解才会更深刻。表和字段含义,如下图:
                                           如何利用SQL语句来操作以上数据呢?我们必须将样本数据导入MySQL客户端(如:Navicat)中。可以在客户端操作数据,或者在终端窗口。工作中经常在客户端操作,所以本文所有SQL语句将在Navicat中学习。   首先将sql脚本保存到桌面(获取方式:关注"Python之每日一课"公众号,后来回复"sql基础数据",即可。),导入SQL脚本的具体操作流程如下:
                                                                                                                           
                                                                                   现在数据准备完成。这里是导入sql脚本;导出同理,选择”转储SQL“文件。当然了,Navicat也支持将当前表或查询结果导出Excel、CSV等文件类型。
   下面可以写SQL语句了(每个sql脚本可以保存,下次直接使用),如下:
                                           类似于Python中 :print(要打印的东西)
   ①通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
   ② 要查询的东西 可以是常量值、表达式、字段、也可以是函数
   补充:可以给字段起别名,好处是提高可读性,更方便理解;多表连接时,区分字段。用AS 或 空格来实现。如下:
                                           2、 条件查询
   条件查询:根据条件过滤原始表的数据,查询到想要的数据
    1)语法 
    2)分类 
   ①条件表达式
   ②逻辑表达式
   ③模糊查询
   ⭐ 注意:where 一定要放到 from 后面。NULL 不是假,也不是真,而是"空";任何运算符,判断符碰到NULL,都得NULL;NULL的判断只能用is null,is not null;NULL 影响查询速度,一般避免使值为NULL。exists查询可以与in型子查询互换,它们之间区别以后语句优化时会详细讲解。
   3、 排序查询
    1)语法 
    2)举栗 
   ⭐ 注意:order by  一定要放到 语句最后(limit前面)
   4、分组查询   1)语法
    2)特点 
   ①可以按单个字段分组
   ②和分组函数一同查询的字段最好是分组后的字段
   ③分组筛选(where 和 having区别)
                                           ④可以按多个字段分组,字段之间用逗号隔开
   ⑤可以支持排序
   ⑥having后可以支持别名
    3)举栗 
   ⭐ 注意:关键字顺序是where —>group by—>having—>order by—>limit( having不能单独使用,需结合group by  ,表示对分组后的结果进行筛选;而 group by 必须结合分组聚合函数一起使用 ,比如:count()、max()等)
   5、 常见函数
    1)单行函数 
     
                                             
    2)分组函数 
    3)分组函数特点 
   ①以上五个分组函数都忽略null值,除了count(*)
   ②sum和avg一般处理数值型,max、min、count可以处理任何数据类型
   ③都可以搭配distinct使用,用于统计去重后的结果
   ④count的参数可以支持:字段、*、常量值,一般放1
   6、连接查询(多表查询)
   单个表不能满足需求时,需要结合多张表,去除有关联的数据。这时就需要用连接查询,连接查询有三种,通常join使用的最多。
   ①等值连接的结果 = 多个表的交集
   ②多个表不分主次,没有顺序要求
   ③一般为表起别名,提高阅读性和性能
                                            ①语法 
    ②好处 
   语句上,连接条件和筛选条件实现了分离,简洁。
   ⭐ 注意:左右连接可互换 A left join B 等价于B right join A;内连接是左
   右连接的交集;mysql没有外连接。
   自连接相当于等值连接,但是等值连接涉及多个表,而自连接仅仅是它自己。如下:在员工信息表里,查询员工名和直接上级的名。
                                           7、子查询
   一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询。在外面的查询语句,称为主查询或外查询。
   ①子查询都放在小括号内
   ②子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
   ③子查询优先于主查询执行,主查询使用了子查询的执行结果
   ④子查询根据查询结果的行数不同分为以下两类:
    2)举栗 
   8、分页查询 (可选)   实际web开发中,当显示的数据,一页显示不完时,需要分页提交sql请求。
    2)特点 
   ①起始条目索引默认从0开始
   ②limit子句放在查询语句的最后
   ③公式:select * from  表  limit (page-1)*sizePerPage,
    3)举栗 
   9、union联合查询
   union用于把涉及多个表的SELECT语句的结果组合到一个结果集合中。适用于查询条件较多,多个表之间没有连接关系的场景。
    2)特点 
   ①多条查询语句的查询的列数必须是一致的
   ②多条查询语句的查询的列的类型几乎相同
   ③union 代表去重,union all 代表不去重
    3)举栗 
   UNION 和 UNION ALL 运行结果的区别如下:
                                           ⭐ 注意:在多个 SELECT 语句中,第一个 SELECT 语句中被使用的字段名称将被用于结果的字段名称。当使用 UNION 时,MySQL 会把结果集中重复的记录删掉,而使用 UNION ALL ,MySQL 会把所有的记录返回,且效率高于 UNION
   好,今天学习到这里。工作中用的最多就是查询。如果能消化本文涉及到的所有内容,大概能解决80%的工作需求。本文更多的是原理介绍,例子不多,只有先知道是什么,才能知道怎么学。那么,接下来最重要的是要多练习实践。因为实际的业务场景要复杂很多,给大家推荐两个刷题的网站,力扣和牛客网,里面有大量的sql面试题。能进一步提高我们sql的水平。这篇文章主要是SQL的常用查询。明天继续学习SQL的DML增删改。一起加油!

数据库基础篇(二)—— SQL之数据查询

4. 通用SQL数据库查询语句精华使用简介

   一 简单查询     简单的Transact SQL查询只包括选择列表 FROM子句和WHERE子句 它们分别说明所查询列 查询的表或视图 以及搜索条件等 
    例如 下面的语句查询testtable表中姓名为 张三 的nickname字段和email字段 
    SELECT nickname email  FROM testtable  WHERE name= 张三 
    (一) 选择列表
    选择列表(select_list)指出所查询列 它可以是一组列名列表 星号 表达式 变量(包括局部变量和全局变量)等构成 
   
     选择所有列
    例如 下面语句显示testtable表中所有列的数据 
    SELECT *  FROM testtable 
     选择部分列并指定它们的显示次序
    查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同 
    例如 
    SELECT nickname email  FROM testtable 
     更改列标题
    在选择列表中 可重新指定列标题 定义格式为 
    列标题=列名  列名 列标题
    如果指定的列标题不是标准的标识符格式时 应使用引号定界符 例如 下列语句使用汉字显示列标题 
    SELECT 昵称=nickname 电子邮件=email  FROM testtable 
     删除重复行
    SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行 默认为ALL 使用DISTINCT选项时 对于所有重复的数据行在SELECT返回的结果集合中只保留一行 
     限制返回的行数
    使用TOP n [PERCENT]选项限制返回的数据行数 TOP n说明返回n行 而TOP n PERCENT时 说明n是表示一百分数 指定返回的行数等于总行数的百分之几 
    例如 
    SELECT TOP *FROM testtable SELECT TOP PERCENT * FROM testtable 
    (二) FROM子句
    FROM子句指定SELECT语句查询及与查询相关的表或视图 在FROM子句中最多可指定 个表或视图 它们之间用逗号分隔 
    在FROM子句同时指定多个表或视图时 如果选择列表中存在同名列 这时应使用对象名限定这些列所属的表或视图 例如在usertable和citytable表中同时存在cityid列 在查询两个表中的cityid时应使用下面语句格式加以限定 
    SELECT username citytable cityid  FROM usertable citytable  WHERE usertable cityid=citytable cityid 
    在FROM子句中可用以下两种格式为表或视图指定别名 
    表名 as 别名  表名 别名
    例如上面语句可用表的别名格式表示为 
    SELECT username b cityid  FROM usertable a citytable b  WHERE a cityid=b cityid 
    SELECT不仅能从表或视图中检索数据 它还能够从其它查询语句所返回的结果集合中查询数据 
    例如 
    SELECT a au_fname+a au_lname  FROM authors a titleauthor ta  (SELECT title_id title  FROM titles  WHERE ytd_sales>   ) AS t  WHERE a au_id=ta au_id  AND ta title_id=t title_id 
    此例中 将SELECT返回的结果集合给予一别名t 然后再从中检索数据 
    (三) 使用WHERE子句设置查询条件
    WHERE子句设置查询条件 过滤掉不需要的数据行 例如下面语句查询年龄大于 的数据 
    SELECT *  FROM usertable  WHERE age> 
    WHERE子句可包括各种条件运算符 
    比较运算符(大小比较) > >= =  !> !<  范围运算符(表达式值是否在指定的范围) BEEEN…AND…  NOT BEEEN…AND…  列表运算符(判断表达式是否为列表中的指定项) IN (项 项 ……)  NOT IN (项 项 ……)  模式匹配符(判断值是否与指定的字符通配格式相符):LIKE NOT LIKE  空值判断符(判断表达式是否为空) IS NULL NOT IS NULL  逻辑运算符(用于多条件的逻辑连接) NOT AND OR
     范围运算符例 age BEEEN AND 相当于age>= AND age<= 
     列表运算符例 country IN ( Germany China )
     模式匹配符例 常用于模糊查找 它判断列值是否与指定的字符串格式相匹配 可用于char varchar text ntext datetime和 *** alldatetime等类型查询 
    可使用以下通配字符 
    百分号% 可匹配任意类型和长度的字符 如果是中文 请使用两个百分号即%% 
    下划线_ 匹配单个任意字符 它常用来限制表达式的字符长度 
    方括号[] 指定一个字符 字符串或范围 要求所匹配对象为它们中的任一个 [^] 其取值也[] 相同 但它要求所匹配对象为指定字符以外的任一个字符 
    例如 
    限制以Publishing结尾 使用LIKE %Publishing 
    限制以A开头 LIKE [A]% 
    限制以A开头外 LIKE [^A]% 
     空值判断符例WHERE age IS NULL
     逻辑运算符 优先级为NOT AND OR
    (四)查询结果排序 
    使用ORDER BY子句对查询返回的结果按一列或多列排序 ORDER BY子句的语法格式为 
    ORDER BY {column_name [ASC|DESC]} [ …n]
    其中ASC表示升序 为默认值 DESC为降序 ORDER BY不能按ntext text和image数据类型进行排序  例如 
    SELECT *  FROM usertable  ORDER BY age desc userid ASC 
    另外 可以根据表达式进行排序 
     二 联合查询 
    UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示 即执行联合查询 UNION的语法格式为 
    select_statement  UNION [ALL] selectstatement  [UNION [ALL] selectstatement][…n] 
    其中selectstatement为待联合的SELECT查询语句 
    ALL选项表示将所有行合并到结果集合中 不指定该项时 被联合查询结果集合中的重复行将只保留一行 
    联合查询时 查询结果的列标题为第一个查询语句的列标题 因此 要定义列标题必须在第一个查询语句中定义 要对联合查询结果排序时 也必须使用第一查询语句中的列名 列标题或者列序号 
    在使用UNION 运算符时 应保证每个联合查询语句的选择列表中有相同数量的表达式 并且每个查询选择表达式应具有相同的数据类型 或是可以自动将它们转换为相同的数据类型 在自动转换时 对于数值类型 系统将低精度的数据类型转换为高精度的数据类型 
    在包括多个查询的UNION语句中 其执行顺序是自左至右 使用括号可以改变这一执行顺序 例如 
    查询 UNION (查询 UNION 查询 )
     三 连接查询 
    通过连接运算符可以实现多个表查询 连接是关系数据库模型的主要特点 也是它区别于其它类型数据库管理系统的一个标志 
    在关系数据库管理系统中 表建立时各数据之间的关系不必确定 常把一个实体的所有信息存放在一个表中 当检索数据时 通过连接操作查询出存放在多个表中的不同实体的信息 连接操作给用户带来很大的灵活性 他们可以在任何时候增加新的数据类型 为不同实体创建新的表 尔后通过连接进行查询 
    连接可以在SELECT 语句的FROM子句或WHERE子句中建立 似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来 所以 在Transact SQL中推荐使用这种方法 
    SQL 标准所定义的FROM子句的连接语法格式为 
    FROM join_table join_type join_table  [ON (join_condition)] 
    其中join_table指出参与连接操作的表名 连接可以对同一个表操作 也可以对多表操作 对同一个表操作的连接又称做自连接 
    join_type 指出连接类型 可分为三种 内连接 外连接和交叉连接 内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作 并列出这些表中与连接条件相匹配的数据行 根据所使用的比较方式不同 内连接又分为等值连接 自然连接和不等连接三种 外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN) 右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种 与内连接不同的是 外连接不只列出与连接条件相匹配的行 而是列出左表(左外连接时) 右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行 
    交叉连接(CROSS JOIN)没有WHERE 子句 它返回连接表中所有数据行的笛卡尔积 其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数 
    连接操作中的ON (join_condition) 子句指出连接条件 它由被连接表中的列和比较运算符 逻辑运算符等构成 
    无论哪种连接都不能对text ntext和image数据类型列进行直接连接 但可以对这三种列进行间接连接 例如 
    SELECT p pub_id p pub_id p pr_info  FROM pub_info AS p INNER JOIN pub_info AS p   ON DATALENGTH(p pr_info)=DATALENGTH(p pr_info) 
    (一)内连接
    内连接查询操作列出与连接条件匹配的数据行 它使用比较运算符比较被连接列的列值 内连接分三种 
     等值连接 在连接条件中使用等于号(=)运算符比较被连接列的列值 其查询结果中列出被连接表中的所有列 包括其中的重复列 
     不等连接 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值 这些运算符包括> >=  ! 
     自然连接 在连接条件中使用等于(=)运算符比较被连接列的列值 但它使用选择列表指出查询结果集合中所包括的列 并删除连接表中的重复列 
    例 下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社 
    SELECT *  FROM authors AS a INNER JOIN publishers AS p  ON a city=p city 
    又如使用自然连接 在选择列表中删除authors 和publishers 表中重复列(city和state) 
    SELECT a * p pub_id p pub_name p country  FROM authors AS a INNER JOIN publishers AS p  ON a city=p city 
    (二)外连接
    内连接时 返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行 而采用外连接时 它返回到查询结果集合中的不仅包含符合连接条件的行 而且还包括左表(左外连接时) 右表(右外连接时)或两个边接表(全外连接)中的所有数据行 如下面使用左外连接将论坛内容和作者信息连接起来 
  SELECT a * b * FROM luntan LEFT JOIN usertable as b  ON a username=b username   
    下面使用全外连接将city表中的所有作者以及user表中的所有作者 以及他们所在的城市 
    SELECT a * b *  FROM city as a FULL OUTER JOIN user as b  ON a username=b username 
    (三)交叉连接
    交叉连接不带WHERE 子句 它返回被连接的两个表所有数据行的笛卡尔积 返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数 例 titles表中有 类图书 而publishers表中有 家出版社 则下列交叉连接检索到的记录数将等
    于 * = 行 
  lishixinzhi/Article/program/SQL/201311/16231 
   

5. 根据以下表及查询要求,写出SQL查询语句?

1.显示5号部门所有员工的基本信息
select * from emp where deptno=5

2.列出所有办事员(CLERK)的姓名和部门名称
select a.ename,b.dname 
from emp a inner join dept b on a.deptno=b.deptno
where a.job='CLERK'

3.列出既不是经理(MANAGER)又不是办事员
	但薪金超过5000元的所有员工名单
select name from emp where sal>5000 and job!='MANAGER' and job!='CLERK'

4.查找所有不姓李的员工,显示其姓名及所在部门名称
select a.ename,b.dname 
from emp a inner join dept b on a.deptno=b.deptno
where a.ename not like '李%'

5.显示工作时间满3年的员工的姓名和受雇年数
select ename,datediff(year,hiredate,getdate()) as hireyear
from emp where datediff(year,hiredate,getdate())>=3

6.显示所有员工详细资料,按姓名排序
select a.*,b.dname from emp a inner join dept b on a.deptno=b.deptno
order by a.ename

7.查找哪些员工所在的部门规模超过了10人,请显示员工名单
select a.ename from emp a inner join dept b on a.deptno=b.deptno
where b.num>10

8.统计员工人数不少于5人的部门中所有员工的薪金总额,
显示部门名称及总金额,并将结果按总金额降序排列。
select b.dname,sum(a.sal) as total from emp a inner join dept b on a.deptno=b.deptno
where b.num>=5 group by b.dname order by sum(a.sal) desc

根据以下表及查询要求,写出SQL查询语句?

6. 关于数据库SQL语句的查询

一、
简单查询
  简单的transact-sql查询只包括选择列表、from子句和where子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。
  例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。
  select
nickname,email
  from
testtable
  where
name='张三'
  (一)
选择列表
  选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
  1、选择所有列
  例如,下面语句显示testtable表中所有列的数据:
  select
*
  from
testtable
  2、选择部分列并指定它们的显示次序
  查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
  例如:
  select
nickname,email
  from
testtable
  3、更改列标题
  在选择列表中,可重新指定列标题。定义格式为:
  列标题=列名
  列名
列标题
  如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:
  select
昵称=nickname,电子邮件=email
  from
testtable
  4、删除重复行
  select语句中使用all或distinct选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为all。使用distinct选项时,对于所有重复的数据行在select返回的结果集合中只保留一行。
  5、限制返回的行数
  使用top
n
[percent]选项限制返回的数据行数,top
n说明返回n行,而top
n
percent时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
  例如:
  select
top
2
*from
testtable
select
top
20
percent
*
from
testtable
  (二)from子句
  from子句指定select语句查询及与查询相关的表或视图。在from子句中最多可指定256个表或视图,它们之间用逗号分隔。
  在from子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:
  select
username,citytable.cityid
  from
usertable,citytable
  where
usertable.
本篇文章来源于
黑软基地-中国最大的黑客教程计算机安全教程下载基地
原文链接:
http://www.hackvip.com/article/sort056/sort058/kkkcc.com-2297.html

7. 数据库进阶:循序渐进讲解SQL查询语句的高级应用技巧[2]

   模式匹配符(判断值是否与指定的字符通配格式相符):LIKE NOT LIKE
    空值判断符(判断表达式是否为空) IS NULL NOT IS NULL
    逻辑运算符(用于多条件的逻辑连接) NOT AND OR
     范围运算符例 age BEEEN AND 相当于age>= AND age<= 
     列表运算符例 country IN ( Germany China )
   
     模式匹配符例 常用于模糊查找 它判断列值是否与指定的字符串格式相匹配 可用于char 
    varchar text ntext datetime和 *** alldatetime等类型查询 
    可使用以下通配字符 
    百分号% 可匹配任意类型和长度的字符 如果是中文 请使用两个百分号即%% 
    下划线_ 匹配单个任意字符 它常用来限制表达式的字符长度 
    方括号[] 指定一个字符 字符串或范围 要求所匹配对象为它们中的任一个 
    [^] 其取值也[] 相同 但它要求所匹配对象为指定字符以外的任一个字符 
    例如 
    限制以Publishing结尾 使用LIKE %Publishing 
    限制以A开头 LIKE [A]% 
    限制以A开头外 LIKE [^A]% 
     空值判断符例WHERE age IS NULL
     逻辑运算符 优先级为NOT AND OR
    (四)查询结果排序
    使用ORDER BY子句对查询返回的结果按一列或多列排序 ORDER BY子句的语法格式为 
    ORDER BY {column_name [ASC|DESC]} [ …n]
    其中ASC表示升序 为默认值 DESC为降序 ORDER BY不能按ntext text和image数据类型进行排
    序 
    例如 
    SELECT *  FROM usertable  ORDER BY age desc userid ASC
    另外 可以根据表达式进行排序 
    二 联合查询
    UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示 即执行联
    合查询 UNION的语法格式为 
    select_statement  UNION [ALL] selectstatement  [UNION [ALL] selectstatement][…n]
    其中selectstatement为待联合的SELECT查询语句 
    ALL选项表示将所有行合并到结果集合中 不指定该项时 被联合查询结果集合中的重复行将只保留一
    行 
    联合查询时 查询结果的列标题为第一个查询语句的列标题 因此 要定义列标题必须在第一个查询语
    句中定义 要对联合查询结果排序时 也必须使用第一查询语句中的列名 列标题或者列序号 
    在使用UNION 运算符时 应保证每个联合查询语句的选择列表中有相同数量的表达式 并且每个查询选
    择表达式应具有相同的数据类型 或是可以自动将它们转换为相同的数据类型 在自动转换时 对于数值类
    型 系统将低精度的数据类型转换为高精度的数据类型 
    在包括多个查询的UNION语句中 其执行顺序是自左至右 使用括号可以改变这一执行顺序 例如 
    查询 UNION (查询 UNION 查询 )
  lishixinzhi/Article/program/SQL/201311/16243 
   

数据库进阶:循序渐进讲解SQL查询语句的高级应用技巧[2]

8. sql数据库查询语句例子

各位同学们好,我们今天继续来说,sql数据库。我们今天的文档中主要介绍了SQL查询语句、查询语句示例等。这里我给大家做了一个总结,有需要的同学可以参考一下。

首先,我们来了解一下SQL数据库组成基本:

查找Movies表里的Title字段:

查找ID小于5的电影的Title和Director的以下这些:

查看电影的总条数

以下查询语句是常用于班级统计的:

查询“001”课程比“002”课程成绩高的所有学生的学号:

查询平均成绩大于60分的同学的学号和平均成绩:

查询所有同学的学号、姓名、选课数、总成绩:

查询姓“李”的老师的个数:

查询没学过“叶平”老师课的同学的学号、姓名:

查询学过“001”并且也学过编号“002”课程的同学的学号、姓名:

查询学过“叶平”老师所教的所有课的同学的学号、姓名:

查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名:

查询所有课程成绩小于60分的同学的学号、姓名:

查询没有学全所有课的同学的学号、姓名:

好了,这就是关于sql数据库查询语句的基础了。我都替你们整理好了,感兴趣的同学收藏一来,需要用的时候直接拿起来用就可以了。我们今天就到这里,下期再见!

本篇文章使用以下硬件型号:联想小新Air15;系统版本:win10;软件版本:sqlserver2008。