SQL语句

T-SQL语句创建表

如图1.

图1

IDENTITY的应用

在图1创建的两个表中,SortId和CommodityId,字段"ID"中,并没有使用NOT  NULL关键字,而是使用了IDENTITY关键字。使用IDENTITY关键字定义的字段又叫标识字段,一个标识字段是唯一标识表中每条记录的特殊字段,当一个新记录添加到这个表中时,这个字段就被自动赋给一个新知=值。默认情况下是按加1递增。





                                           使用SQL语句向表中插入数据


点击新建查询,如图2.这里我多次点击的执行,所以添加了相同的数据。

图2


图3

插入多行数据

通过将现有表中的数据添加到已存在的表中

INSERT INTO <表名>(列名)

SELECT <列名>

FROM <源表名>

将现有表中的数据添加到新表中

SELECT <列名>

INTO <表名>

FROM <源表名>


                                       使用SQL语句进行修改数据


修改数据语法:

UPDATE 表名 SET 列名 = 更新值

[WHERE 更新条件]

图4

以上是更新表中Gender的全部数据,接下来分以下几种情况的更新,如图5

图5



                                      使用SQL语句进行删除数据


删除数据语法:

DELETE[FROM] 表名 [WHERE <删除条件>]

TRUNCATE TABLE 表名


DELETE FROM orderInfo   这里是对表中全部的数据进行删除

如图6.首次先对orderInfo这张表进行查询,有三条数据,然后执行,DELETE FROM orderInfo这条语句。

图6

表中全部数据被删除,之后再向其表中插入数据的时候,如图7.

图7

注意:使用DELETE进行删除数据,标识列继续增长,不会从标识种子(也就是1)开始。


TRUNCATE 注意事项:

表结构、列、约束等不被改动

不能用于有外键约束的表

标识列重新开始编号

图8

                                                      使用SELETE语句


使用SELETE语句不但可以在数据库中精确的查找某条信息,而且还可以模糊的查找带有某项特征的多条数据,这在很大程度上方便了用户查找数据信息。SELETE语句是一个查询表达式,包括:SELECT、FROM、WHERE、GROUP BY 和 ORDER BY 子句。SELECT语句具有数据查询、统计、分组和排序的功能。

SELECT : 查询语句。例如,SELECT * 是查询表中全部属性列,也可以这样 SELECT 编号,姓名

FROM :用来指定数据源,从哪张表进行查询。

WHERE :用来指定限定范围的行的搜索条件,例如WHERE Gender=1,就是查询性别标识为1的行

                    信息。


比较运算符:USE 学生管理数据库

                      SELECT *FROM 学生表  WHERE 性别='女'////SELECT *FROM 学生表  WHERE 成绩>90

逻辑运算符:USE 学生管理数据库

                       SELECT *FROM 学生表  WHERE 性别='女' AND 政治面貌='团员'

范围运算符:USE 学生管理数据库

                       SELECT *FROM 学生表  WHERE 学号 BETWEEN 1004 AND 1045   或者

                       SELECT *FROM 学生表  WHERE 学号 NOT BETWEEN 1004 AND 1045

列表运算符:USE 学生管理数据库

                      SELECT *FROM 学生表  WHERE 学号 IN ('1004','1005','1007') 查询学号为这三个编号的

                      所有学生信息。

                      注:如果查询除去这三个学号以外的所有学生信息,用NOT IN()。

字符运算符:如果在查询数据时,只知道列名的一部分,或想统计一部分以某数据开头的数据信息,

                       就需要用到LIKE /NOT LIKE 。

图9

例如:USE 学生管理数据库

           SELECT *FROM 学生表  WHERE 学号 LIKE '1004'  等同于 

           SELECT *FROM 学生表  WHERE 学号= '1004'

注意:如果LIKE后面的匹配串中不含通配符,则可用等号“=”取代LIKE.用!=或<>(不等于)取代NOT LIKE.

           USE 学生管理数据库

           SELECT *FROM 学生表  WHERE 姓名 LIKE '李%'  

例如:查询姓名中第二个字包含“小”的所有学生信息,语句如下

          USE 学生管理数据库

          SELECT *FROM 学生表  WHERE 姓名 LIKE '_小%'

语句说明在“小”前有个单字符,在“小”后有零到多个字符。

未知值:当查询数据库中的值为NULL时,可以使用包含IS NULL关键字的WHERE子句进行查询。反

               之,要查询数据库中的值不为NULL时,可以使用IS NOT NULL 关键字。基本语法如下:

              USE 学生管理数据库

              SELECT *FROM 学生表  WHERE 班级编号 IS NULL

图10 常用运算符

GROUP BY : 用来指定查询结果的分组条件,即归纳信息类型。

SELECT COUNT(*) FROM BIAOMING

图11 常用统计函数

例如:要在【教务管理系统】数据库的【课程信息】表中按照“班级编号”查询出每个班级选课程总数,输入如下的SELECT语句:

           USE 教务管理系统

           SELECT 班级编号,COUNT(课程名称) AS 选课总数

           FROM 课程信息 GROUP BY 班级编号

例如:查询课程编号为1的学生的平均成绩。语句如下:

          USE 教务管理系统

          SELECT AVG(成绩) AS 平均成绩

          FROM 成绩表

          WHERE 课程编号='1'

例如:查询课程编号为1号的学生的最高成绩。语句如下:

         USE 教务管理系统

         SELECT MAX(成绩) AS 最高成绩

         WHERE 课程编号='1'


HAVING : 用来指定组或聚合的搜索条件。通常情况下,HAVING语句与GROUP BY子句共同使用,

                    HAVING子句的用法类似于WHERE子句。WHERE用于限定每一行的查询条件,而

                    HAVING则限定分组统计值。使用HAVING可以指定分组或聚合的搜索条件。

例如:从数据库【教务管理系统】数据库的【课程信息】表中,先按照班级编号查询出每个班级选课总数,然后输出课程总数大于10的班级编号和选课总数。语句如下:

           USE 教务管理系统

           SELECT 班级编号,COUNT(课程名称) AS 选课总数

           FROM 课程信息

          GROUP BY 班级编号

          HAVING COUNT(*)>10

ORDER BY : 用来指定结果集的排序方式,ASC表示结果集以升序排列,DESC表示结果集以降序排

                        列,默认情况下结果集以ASC升序排列。

                        USE 学生管理数据库

                      SELECT *FROM  成绩表  ORDER BY 成绩 DESC,年龄 ASC

使用DISTINCT关键字:

在数据库查询中有时需要去掉重复行以获取所需的信息。

例如:USE 学生管理数据库

           SELECT 籍贯

           FROM 学生表

这样查询,学生的籍贯有可能会有很多重复的信息,这样加了DISTINCT关键字,可以去掉相同的行列值。语句如下:

          USE 学生管理数据库

          SELECT DISTINCT 籍贯

          FROM 学生表

使用TOP关键字:

在查询信息时,有时需要表中前n行的信息,就需要用到SELECT子句中TOP关键字。例如语法格式如下:

USE 学生管理数据库

SELECT  DISTINCT  TOP 3 籍贯

FROM 学生表

使用别名:

第一种表达方式:使用“空格”来改变结果集中列的别名

USE ZXGL_Web_DB

SELECT 编号 'Id',姓名 'Name', 年龄 'Age', 籍贯 '出生所在地'

FROM AdminLevels

第二种表达方式:使用“=”赋值运算符来改变结果集中的别名,赋值的顺序是从右向左赋值

USE ZXGL_Web_DB

SELECT 'Id'=编号, 'Name'=姓名,  'Age'=年龄,  '出生所在地'=籍贯

FROM AdminLevels

第三种表达方式:使用AS关键字来改变结果集中的别名

USE ZXGL_Web_DB

SELECT ID AS 编号,LevelName AS 名称,LevelMemo,Sorts 

FROM AdminLevels

如图12

图12

计算列:

在进行数据查询时,在SELECT子句中不仅可以是属性列,而且还可以是表达式。这时可以在SELECT语句中使用计算列完成,计算列并不存在与数据表中,而是通过对某些列的数据进行计算得到结果。


                                             SELETE操作多表数据


在实际查询应用中,用户所需要的数据并不全部都在一个表或视图中国,而是在多个表中,这时就要使用多表查询。多表查询实际上是通过各个表之间的共同的相关性来查询数据的,是数据库查询最主要的特征。多表查询首先要在这些表中建立连接。

一、JOIN连接

在进行多表操作时,最简单的连接方式就是在SELECT语句列表中引用多个表的字段,其FROM子句中用半角逗号将不同的基本表隔开。如果使用WHERE子句创建一个同等连接则能使查询结果集更加丰富,同等连接是指第一个基表中的一个或多个列值与第二个基表中对应的一个或多个列值相等的连接。通常情况下,一般使用键码列建立连接,即一个基表中的主键码与第二个基表中的外键码保持一致,可以遵循以下基本原则:

例如:在【教务管理系统】数据库中,从【学生信息】表和【成绩表】中查询出“学号”,“姓名”,“班级编号”以及“成绩”信息,两个表通过“学生信息.学号”与“成绩表.学号”条件建立连接。

            USE 教务管理系统

            SELECT S.学号,S.姓名,S.班级编号,C.成绩

            FROM 学生信息 S,成绩表 C 

            WHERE S.学号=C.学号


二、内连接查询

内连接的特点:

1)、两个表存在主外键关系

2)、参与查询的两个表的地位相同无主次之分

图13

内连接又分等值连接、非等值连接和自然连接。

1、等值连接

等值连接就是在连接条件中使用比较运算符等于号(=)来比较连接列的列值,其查询结果中列出被连接表中的所有列并且包括重复列。

例如:在【教务管理系统】数据库中,从【学生信息】表和【成绩表】中查询出“学号”,“姓名”,“班级编号”以及“成绩”信息。两个表通过“学生信息.学号”与“成绩表.学号”条件建立连接。

            USE教务管理系统

            SELECT 学生信息.学号,学生信息.姓名,学生信息.班级编号,成绩表.成绩

            FROM  学生信息 JOIN 成绩表 ON  学生信息.学号=成绩表.学号

上述语句中,将【学生信息】表和【成绩表】通过ON关键字进行内连接,从而实现多表查询功能。

2、非等值连接

就是在连接条件中使用除了等于号之外的比较运算符的比较连接列的列值。在非等值连接中,可以使用的比较连接符有:>、<、>=、<=、<>。也可以使用范围运算符BETWEEN.

例如:在【教务管理系统】数据库中的【学生信息】表和【成绩表】中,查询出所有考试成绩在80分到100分之间的学生成绩信息,其中查询信息列包括学生“学号”,“姓名”,“年级”,“班级编号”以及考试“成绩”这些字段,并按照成绩进行降序排列。

            USE 教务管理系统

            SELECT S.学号,S.姓名,S.年级,S.班级编号,C.成绩

            FROM 学生信息 S  INNER JOIN 成绩表 C  ON S.学号=C.学号

            AND C.成绩 BETWEEN 80 AND 100

             ORDER BY  C.成绩  DESC

3、自然连接

自然连接是在连接条件中使用等于比较运算符比较连接列的列值,但它使用选择列表指出查询结果集中所包括的列,并删除连接表中的重复列。在使用自然连接查询时,它为具有相同名称的列自动进行记录匹配。

例如:在【学生信息】表和【成绩表】中创建一个自然连接查询,限定条件为两表中的学号相同,返回学生“学号”,“姓名”,“年级”,“班级编号”和“成绩”信息。

SELECT DISTINCT S.学号,S.姓名,S.年级,S.班级编号,C.成绩

FROM 学生信息 S INNER JOIN 成绩表 C

ON S.学号=C.学号


三、外连接

外连接与内连接不同。内连接消除与另一个表的任何不匹配的行。而外连接会返回FROM子句中提到的至少一个表或视图中的所有行,只要这些行符合任何搜索条件。

外连接特点:

1)、参与外连接的表有主从之分

2)、返回的是主表当中的所有数据

3)、对那些不符合连接条件的列,将被填上NULL后再返回到结果集中

外连接查询的分类:左外连接、右外连接和完全连接。

左外连接(LEFT OUTER JOIN):返回指定的左表的所有行。而从表则返回与主表相匹配的行信息,将不匹配行填上NULL后也返回到查询结果中。

右外连接(RIGHT OUTER JOIN):返回所有的匹配行并从关键字JOIN右边的表中返回所有不匹配的行。

完全连接 (FULL OUTER JOIN):返回两个表中所有匹配的行和不匹配的行。


如何来区分左表还是右表呢?

LEFT JOIN 左外连接 以 LEFT 左边的表为主表

RIGHT JOIN 右外连接 以RIGHT 右边的表为主表


不同的 SQL JOIN

下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

JOIN: 如果表中有至少一个匹配,则返回行

LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

FULL JOIN: 只要其中一个表中存在匹配,就返回行







最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 50个常用的sql语句 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cna...
    最美的太阳WW阅读 3,155评论 0 23
  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 1,224评论 0 7
  • 语 句 功 能 数据操作 SELECT——从数据库表中检索数据行和列INSERT——向数据库表添加新数据行DELE...
    戰敭阅读 5,075评论 0 53
  • 基础 创建数据库 CREATE DATABASE database-name 删除数据库 drop databas...
    RoronoaZoro丶阅读 379评论 0 0
  • 阿混 今天九月一号,新学年开学之曰。上班途中,偶听两家长路语,路人甲:“一二班(老师)孬,五六班(...
    阿混胡子阅读 143评论 0 0