SQL语句简单语法

   SQL语句基本的四大元素(增,删,改,查) 插入数据

  语法:INSERT INTO 表名(字段1,字段2,...)VALUES(值1,值2,...)

  其中,INTO可选.

  例如:将姓名‘张三’学号‘s2t14’年龄22插入到stuInfo表中的stuName,stuNo,stuAge这三个字段中。

  INSERT INTO stuInfo (stuName,stuNo,stuAge) VALUES ('张三','s2t14',22)

  插入多行数据

  1.通过INSERT SELECT语句将现有表中的数据添加到新表

  语法:INSERT INTO 新表名(字段1,字段2,...)SELECT 字段1,字段2,... FROM 原表名

  例如:INSERT INTO TongXunLu(‘Name’,‘Address’,‘Email’)SELECT SName,SAddress,SEmail FROM Students

  2.通过SELECT INTO语句将现有表中的数据添加到新表

  语法:SELECT 表名.字段1,表名.字段2,... INTO 新表名 FROM 原表名

  例如:SELECT Students.SName,Students.SAddress,Students.SMail INTO TongXunLu FROM Students

  因为标识列的数据是不允许指定的,因此我们可以创建一个新的标识列

  语法:SELECT IDENTITY (数据类型,标识种子,标识增长量) AS 列名 INTO 新表名 FROM 原表名

  例如:SELECT Students.SName,Students.SAddress,Students.SMail,IDENTITY(int,1,1)AS StudentsID INTO TongXunLu FROM Students

  3.通过UNION关键字合并数据进行插入

  UNION语句用于将两个不同数据或查询结果组合的一个新的结果集,当然,不同的数据或查询结果,也要求数据个数、顺序、数据类型都一致,因此,当向表中重复插入多次数据的时候,可以使用SELECCT...UNION来简化操作。

  例如:INSERT Students(SName,SGrade,SSex)

  SELECT '女生1',7,0 UNION

  SELECT '女生2',7,0 UNION

  SELECT '女生3',7,0 UNION

  SELECT '女生4',7,0 UNION

  SELECT '女生5',7,0 UNION

  SELECT '男生1',7,1 UNION

  SELECT '男生2',7,1 UNION

  SELECT '男生3',7,1 UNION

  SELECT '男生4',7,1 删除数据

  语法:DELETE FROM 表名 WHERE (条件)

  例如:删除stuInfo表中年龄小于20岁的学生。

  DELETE FROM stuInfo WHERE stuAge <20

  TRUNCATE TABLE用来删除表中所有行的命令,功能上它类似于没有WHERE子句的DELETE语句。

  例如:要删除学员信息表中的所有记录行,可以使用。

  TRUNCATE TABLE Students

  提示:TRUNCATE TABLE 删除表中的所有行,但是表的结构、列、约束、索引等不会被改动。TRUNCATE TABLE不能用于有外键约束引用的表,这种情况下,需要使用DELETE语句。 修改数据

  语法:UPDATE 表名 SET 字段1=值1,字段2=值2,... WHERE (条件)

  例如:将stuInfo表中姓名是张三的学生年龄修改为25岁。

  UPDATE stuInfo SEF stuAge = 25 WHERE stuName = '张三'

  还可以通过表达式来更新数据。

  例如:需要在成绩表中更新成绩,所有低于85分的都在原来的基础上加5分,更新的SQL语句如下。

  UPDATE Scores SET Scores =Scores + 5 WHERE Scores <= 85 查询数据

  1.查询所有的数据行和列

  把表中所有数据行和列到列举出来需要使用“*”通配符来表示所有的列。

  例如:查询Students表中的所有数据。

  SELECT * FROM Students

  2.条件查询

  语法:SELECT 字段1,字段2,...FROM 表名

  例如:查询stuInfo表中所有学生的姓名(stuName)和年龄(stuAge)两个字段。

  SELECT stuName,stuAge FROM stuInfo

  3.在查询中使用列名

  AS子句可以用来改变结果集列的名称,还有一种情况是要让标题列的信息更易懂。

  例如:把SCode列名查询后显示为“学员编号”

  SELECT SCode AS 学员编号,SName AS 学员姓名 FROM Students

  还有一种情况是使用计算、合并得到新列的命名。

  例如:在查询Employees表中的数据时,需要把FirstName和LastName字段合并成一个叫“姓名”的字段。

  SELECT FirstName+'.'+LastName AS '姓名'FROM Employees 或者

  SELECT '姓名'= FirstName+'.'+LastName FROM Employees

  4.查询空行

  在SQL语句中采用“IS NULL”或者“IS NOT NULL”来判断是否为空行。

  例如:要查询学员信息表中没有填写Email信息的学员,可以使用以下查询语句。

  SELECT SName FROM Students WHERE SEmail IS NULL

  5.在查询中使用常量列

  有的时候,一些常量的缺省信息需要添加到查询输出中,以方便统计或计算。

  例如:查询学员信息的时候,学校名称统一都是“河北新龙”,查询输出的语句为。

  SELECT 姓名=SName,地址=SAddress,'河北新龙' AS 学校名称 FROM Students

  6.查询返回限制的行数

  例如:在测试的时候,如果数据库中有上万条记录,而只要检查前面十行数据是否有效。

  SELECT TOP 10 SName,SAddress FROM Students WHERE SSex = 0 查询排序

  如果需要按照一定的顺序排列查询语句选中的行,需要使用ORDER BY子句,并且排序可以是升序(ASC)或者降序(DESC)。如果不指定ASC或者DESC,缺省记录集按ASC升序排序。上面讲述的SQL语句都可以在其后面加上ORDER BY来进行排序。

  例如:查询学员成绩的时候,如果把所有成绩都降低10%后加5分,再按照及格成绩的高低来进行排列。

  SELECT StudentID AS 学员编号,(Score*0.9+5)AS 综合成绩 FROM Score WHERE (Score*0.9+5)>60 ORDER BY Score

  还可以按照多个字段进行排序。

  例如:要在学员成绩的基础上,再按照课程ID进行排序的语句如下。

  SELECT StudentID AS 学员编号,Score AS 成绩 FROM Score WHERE Score>60 ORDER BY Score,CourseID

  特殊排序

  在数据库表中有以下字符数据,如:

  13-1、13-10、13-100、13-108、14-3、14-1、13-18

  现在希望通过SQL语句进行排序,并且首先要按照前半部分的数字进行排序,然后再按照后半部分的数字进行排序,输出要排成这样:13-1、13-10、13-18、13-100、13-108、14-1、14-3

  数据库表名:SellRecord;字段名:ListNumber

  分析:

  这是查询语句,需要使用SELECT语句,需要用到ORDER BY进行排序,并重新计算出排序的数字来。

  前半部分的数字,可以从先找到“-”符号的位置,然后取其左半部分,最后再使用Convert函数将其转换为数字。

  Convert(int,Left(ListNumber,CharIndex('-',ListNumber)-1))

  后半部分的数字,可以先找到“-”符号的位置,然后把从第一个位置到该位置的全部字符替换为空格,最后再使用Convert函数将其转换为数字。

  Convert(int,Stuff(ListNumber,1,Charindex('-',ListNumber),''))

  完整的T-SQL语句是:

  SELECT ListNumber

  FROM SellRecord

  ORDER BY Convert(int,Left(ListNumber,CharIndex('-',ListNumber)-1)),Convert(int,Stuff(ListNumber,1,Charindex('-',ListNumber),''))

  使用LIKE进行模糊查询

  LIKE运算符用于匹配字符串或字符串的一部分(称为子串),由于该运算符只用于字符串,所以仅与Char或Varchar数据类型联合使用。

  在数据更新、删除或者查询的时候,依然可以使用LIKE关键字来进行匹配查找,例如:

  SELECT * FROM Students WHERE SName LIKE '张%'

  使用BETWEEN在某个范围内进行查询

  使用关键字BETWEEN可以查找那些介于两个已知值之间的一组未知值。要实现这种查找必须知道开始查找的初值和终值,这个最大值和最小值用单词AND分开,例如:

  SELECT * FROM SCore WHERE Score BETWEEN 60 AND 80

  此外,BETWEEN查询日期范围的时候使用得比较多,例如:查询不在1992年8月1号到1993年8月1号之间订购的读书列表。

  SELECT * FROM Sales WHERE ord_date NOT BETWEEN '1992-8-1' AND '1993-8-1'

  提示:使用NOT来对限制条件“取反”操作

  使用IN在列举值内进行查询

  查询的值是指定的某些值之一,可以使用带列举值的IN关键字来进行查询。

  例如:列举值放在圆括号里,用逗号分开。

  SELECT SName AS 学员姓名 FROM Students WHERE SAddress IN ('北京','广州','上海') ORDER BY SAddress SQL Server中的聚合函数

  在查询中还会经常碰到的要求是取某些列的最大值、最小值、平均值等信息,有时候还需要计算出究竟查询到多少行数据项。这个时候就可以使用聚合函数了,聚合函数能够基于列进行计算,并返回单个值。

  SQL Server提供了以下几个聚合函数:

  1.SUM

  SUM返回表达式中所有数值的总和,它只能用于数字类型的列。

  例如:在Pubs数据库中,要得到商务付款的总数,执行以下查询语句。

  SELECT SUM(ytd_sales) FROM titles WHERE type = 'business'

  注意:这种查询只返回一个数值,因此,不能够直接与可能返回多行的列一起使用来进行查询。

  2.AVG

  AVG函数返回表达式中所有数值的平均值,也只能用于数字类型的列。

  例如:要查询及格线以上的学员的平均成绩。

  SELECT AVG(SCore) AS 平均成绩 FROM Score WHERE Score >=60

  3.MAX和MIN

  MAX返回表达式中的最大值,MIN返回表达式的最小值,它们都可以用于数字型、字符型以及日期/时间类型的列。

  例如:查询平均成绩、最高分、最低分的语句如下。

  SELECT AVG(SCore) AS 平均成绩,MAX(Score) AS 最高分,MIN(Score) AS 最低分 FROM Score WHERE Score >=60

  4.COUNT

  COUNT返回提供的表达式中非空值的计数,COUNT可以用于数字和字符类型的列。

  例如:查询及格人数的语句如下。

  SELECT COUNT(*) AS 及格人数 FROM Score WHERE Score >= 60 分组查询

  使用Group By进行分组查询

  成绩表中存储了所有课程的成绩,在这种情况下,可能就需要统计不同课程的平均成绩。也就是说,需要对不同的成绩首先按照课程来进行分组,分组以后再进行聚合计算,得到累计信息。

  采用分组查询实现的SQL语句如下:

  SELECT CourseID, AVG(Score) AS 课程平均成绩 FROM Score GROUP BY CourseID

  使用HAVING子句进行分组筛选

  如果查询内部测试的成绩,只显示“补考过的学员”的成绩怎么处理呢?这个时候,牵涉到分组统计后的条件限制。限制条件为COUNT(Score)>1,也就是相同的学员编号列和内部测试成绩列,至少出现过两次。这时候使用WHERE子句是不能满足查询要求的,必须使用HAVING子句。例如:

  SELECT StudentID AS 学员编号,CourseID AS 内部测试,AVG(Score) AS 内部测试平均成绩 FROM Score GROUP BY StudentID,CourseID

  HAVING COUNT(Score)>1 多表联接查询

  多表联接查询实际上是通过各个表之间共同列的关联性来查询数据,它是关系数据库查询最主要的特征,联接可分为内联接、外联接及交叉联接等类型。

  内联接查询可以通过两种方式实现

  1.在WHERE子句中指定联接条件

  SELECT Students.SName,Score.CourseID,Score.Score FROM Students,Score WHERE Students.SCode = Score.StudentID

  上面这种形式的查询,相当于FROM后面紧跟了两个表名,然后在字段列表中用“表名.列名”来区分列,再在WHERE条件子句中加判断,要求学员编号信息相等。

  2.在FROM子句中使用JOIN...ON

  上面的查询也可以通过以下的JOIN...ON子句来实现。

  SELECT S.SName,C.CourseID,C.Score FROM Students AS S INNER JOIN Score AS C ON (S.SCode = C.StudentID)

  外联接查询

  与内部联接相对的方式称为外部联接,外部联接又分为左外部联接和右外部联接。

  1.左外联接查询

  例如:要统计所有学员的考试情况,要求显示所有参加考试学员的每次考试分数,没有参加考试的学员也要显示出来。这时候,是以学员信息表为主表、学员成绩表为从表的左外联接查询。

  SELECT S.SName,C.CourseID,C.Score FROM Students AS S LEFT OUTER JOIN Score AS C ON S.SCode = C.StudentID

  2.右外联接查询

  右外联接查询与左外联接查询类似,中不过要包含右表中所有匹配的行。

  SELECT Titles.Title_id,Titles.Title,Publishers.Pub_name FROM titles RIGHT OUTER JOIN Publishers ON Titles.Pub_id = Publishers.Pub_id

时间: 2024-08-01 16:36:07

SQL语句简单语法的相关文章

收藏的SQL知识以及SQL语句简单实践通俗易懂_数据库其它

小引 首先说明,这个笔者2年前学习SQL的遗漏下来的笔记,由于参加完腾讯的笔试,内容比较偏向数据机构和编译以及数据库,刚好要换台本本,心里不想把它弄死在硬盘里,觉得蛮好的,所以把它都分享了,主要第一部分简单介绍SQL语言,第二部分简单实践,纯属于简单类似的记录,通俗易懂,希望对学习数据库原理的同学有一定的帮助! 主要内容: 综述 简单实践 综述 大家都知道SQL是结构化查询语言,是关系数据库的标准语言,是一个综合的,功能极强的同时又简洁易学的,它集级数据查询(Data Quest),数据操纵(D

SQL语句中的case when语法以及Oracle中的类似方法

一.基本概念和例子 case when是sql语句的语法,而不是属于特定数据库的语言 方法一: select num,name, (case classnowhen '1' then '一班'when '2' then '二班'else '其他班级' end) as classname from student 方法二: select num,name, (case when classno = '1' then '一班'when classno = '2' then '二班'else '其他班

ORACLE数据库SQL语句的执行过程

SQL语句在 数据库中处理过程是怎样的呢?执行顺序呢?在回答这个问题前,我们先来回顾一下:在ORACLE数据库系统架构下,SQL语句由用户进程产生,然后传到相 对应的服务端进程,之后由服务器进程执行该SQL语句,如果是SELECT语句,服务器进程还需要将执行结果回传给用户进程. SQL语句的执行过程一般如下: 解析(PARSE)-- 绑定(BIND)--执行(EXECUTE)--提取(FETCH 只有SELECT才需要这步) 解析   服务器进程接收到一个SQL语句时,首先要将其转换成执行这个S

Oracle SQL语句解析过程你造么?

我们都知道,Oracle在执行SQL之前,需要对SQL语句进行解析.Oracle中,SQL语句可分为DDL和DML两类.对于DDL,因为很少被共享使用,故几乎每次执行时,都需要进行硬解析.而对于DML,会根据实际情况进行硬解析或软解析.这些过程都是如何进行的,什么是硬解析,什么又是软解析呢?我们将在下文揭晓. SQL语句的解析过程,从总体上,可分为四个阶段: 语法检查 语意检查 解析阶段 执行阶段 针对每个阶段,我们可以做个详细的划分: 1语法检查 对SQL语句进行语法检查,检查是否有语法错误,

SQL语句执行过程详解

SQL语句执行过程详解一条sql,plsql的执行到底是怎样执行的呢?一.SQL语句执行原理:第一步:客户端把语句发给服务器端执行当我们在客户端执行 select 语句时,客户端会把这条 SQL 语句发送给服务器端,让服务器端的进程来处理这语句.也就是说,Oracle 客户端是不会做任何的操作,他的主要任务就是把客户端产生的一些 SQL 语句发送给服务器端.虽然在客户端也有一个数据库进程,但是,这个进程的作用跟服务器上的进程作用事不相同的.服务器上的数据库进程才会对SQL 语句进行相关的处理.不

操作account表和service表,查询申请远程登录业务的客户的数据,下列sql语句正确的是:

问题描述 操作account表和service表,查询申请远程登录业务的客户的数据,下列sql语句正确的是: 这个怎么解释啊...有点不懂 求详细解释... 解决方案 理论上 b和d正确 in要指明字段,exsist不需要 解决方案二: 敝人也是新手,不过A.B选项的语法是错误的.where条件后边是需要字段(id)的:另外exists的基本用法见百度,B明显不对. 这个题目查询的原理就是account和service两张表的id字段相等作为条件,连接两张表.C.D效果是一样的. 总之,建议楼主

Oracle中SQL语句解析的步骤

我们都知道在Oracle中每条SQL语句在执行之前都需要经过解析,这里面又分为软解析和硬解析.那么这两种解析有何不同之处呢?它们又分别是如何进行解析呢?Oracle内部解析的步骤又是如何进行的呢?下面我们就这些话题进行共同探讨. 在Oracle中存在两种类型的SQL语句,一类为DDL语句,他们是从来不会共享使用的,也就是每次执行都需要进行硬解析.还有一类就是DML语句,他们会根据情况选择要么进行硬解析,要么进行软解析.在Oracle 8i OCP教材的023中1-12有说明SQL语句的解析步骤,

SQL语句的执行原理分析_MsSql

原理:第一步:应用程序把查询SQL语句发给服务器端执行.我们在数据层执行SQL语句时,应用程序会连接到相应的数据库服务器,把SQL语句发送给服务器处理.第二步:服务器解析请求的SQL语句.1:SQL计划缓存,经常用查询分析器的朋友大概都知道这样一个事实,往往一个查询语句在第一次运行的时候需要执行特别长的时间,但是如果你马上或者在一定时间内运行同样的语句,会在很短的时间内返回查询结果. 原因:1):服务器在接收到查询请求后,并不会马上去数据库查询,而是在数据库中的计划缓存中找是否有相对应的执行计划

SQL SELECT DISTINCT 语法与使用教程

SQL SELECT DISTINCT 语法与使用教程 本章将解释选择离散发言. 在SQL选择不同的声明 在一个表中,一些列可能包含重复的值.这不是一个问题,然而,有时你会希望只列出不同(不同的)值在桌子上. 的独特的关键字可以用来只返回独特的(不同)的价值. 选择不同的SQL语法 SELECT DISTINCT column_name(s) FROM table_name   选择不同的榜样 在"person"表: P_Id LastName FirstName Address Ci