SQL Server使用笔记(联合mysql必知必会书一起看)

SQL Server使用笔记(一)

第三章:使用mysql

一、连接到数据库

有两类DBMS(数据库管理系统),一类是共享文件系统(Microsoft Access);另一类是客户机-服务器DBMS系统(mysql\oracle等),如果是客户机-服务器DBMS则需要在执行命令之前登录到服务器DBMS,我只简单实验一下,所以使用SQL Server默认的localhost

二、选择数据库

在刚使用SQL Server时,没有任何打开的数据库可供使用,所以需要自己用USE关键字选择一个数据库。必须先打开数据库才能读取其中数据。还有在执行时选择数据库的栏里选择对应数据库。
Eg: USE master

三、了解数据库和表

Mysql必知必会书中推荐用show语句,比如show databases; show tables; show columns from customers;

使用过程中的错误和补充部分
错误
使用show关键字的时候总会发生“找不到存储过程show”的报错,
理由:这是一个特定于MySQL的命令。 它不适用于SQL Server。
在SQL Server中可以使用

SELECT * FROM sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');

–在SQL Server系统所有的数据库中找,但是排除内置数据库
来代替show databases

对象名错误
– Insert rows into table ‘Customers’
– 会出现对象名错误的问题,两种原因,一种是查询执行的时候没有切换到表所在的数据库
– 第二种是做了多种操作,缓存出现问题,解决:清除缓存,快捷键ctrl+shift+r

补充部分:
SQL Server里面经常出现的dbo的意思:dbo是是一个构架(schema,又称模式)
,是数据库下的一个逻辑命名空间,可以存放表、视图等数据对象,它是数据库对象的容器。
(数据库架构表)
具体见:https://blog.csdn.net/sinolover/article/details/101423747
简单来说,在SQL2000中,那时没有架构的概念只有用户的概念,dbo作为默认用户来使用
在SQL2005开始出现架构的概念,为了与SQL2000代码兼容,dbo开始作为默认架构来使用。

即:在2000中DataBaseName.dbo.TableName解释为:数据库名.用户名.表名,
在2005中DataBaseName.dbo.TableName解释为:数据库名.架构名.表名,
在 SQL Server 2000 中,数据库用户和架构是隐式连接在一起的。每个数据库用户都是与该用户同名的架构的所有者。
在 SQL Server 2005 中,架构独立于创建它们的数据库用户而存在。可以在不更改架构名称的情况下转让架构的所有权。

第四章 检索数据

一、各关键字和符号

想要使用select语句查询,必须至少给出两条信息:想要查找什么信息以及从哪里找这个信息

select Name
From dbo.Customers

如果没有明确排序查询结果,则返回数据的顺序可能随机
4.1.1 对于分号:SQL Server单条select查询语句可以不加分号,但是多条必须要加分号。Mysql同理(最好随时一条查询语句完成加上分号)

4.1.2 对于关键字大小写:如select,SQL Server也不区分大小写,但是习惯上关键字大写,列和表名小写便于调试和阅读

4.1.3 对于空格:SQL调试时所有空格都被忽略,所以一个SQL语句可以写成一行也可以写成多行,但是为了方便调试,一般写成多行。

4.1.4 对于逗号:当用select检索多列的时候,列名之间一定要加逗号,最后一个列名后不加

4.1.5 对于通配符*:当检索表中所有列时,可以在列名的位置用 * 替代,代表查询所有列。非必要时不用,因为检索不必要的列会降低检索和应用程序的性能;同时它也有一大好处,可以检索出名字未知的列

4.1.6 对于DISTINCT:DISTINCT关键字指示只返回不同的值,比如SELECT DISTINCT student_number FROM xuanke_info,即在选课信息表里找学生学号,可能一个学生有几条选课信息,但只想返回不重复的学号时,用DISTINCT。同时需要注意,不能部分使用DISTINCT,即DISTINCT应用于它之后所有的列。如果SELECT DISTINCT后面跟了两列,那返回的就是两列的组合中不重复的部分

4.1.7 对于LIMIT关键字:LIMIT一般后面接一个数字或两个数字。当接一个数字时代表从第一行开始返回的行数;当接两个数字时,中间用逗号隔开,第一个数字表示从第几行开始,第二个数字表示返回的行数。但是要注意LIMIT是从第0行开始查询的,比如LIMIT 3,4 就是代表返回从实际的第4行开始,返回行数4行。从SQL5开始也有另一种替代的语法,比如LIMIT 3,4写作LIMIT 4 OFFSET 3。 (对于返回行数不足的情况,LIMIT只能返回它能返回的行)

4.1.8 对于不等号:sql中有两种方式表示不等于,一种是"<>" (不含引号),另一种是"!=" (不含引号),用法是一样的。(注意sql中的等号不是”==“是”=“)

4.1.9 对于group by关键字:聚合函数,要注意聚合函数的结果作为筛选条件时,接having而不是where
eg:牛客练习题 https://www.nowcoder.com/practice/ddbcedcd9600403296038ee44a172f2d?tpId=199&tqId=1975670&ru=%2Fta%2Fsql-quick-study&qru=%2Fta%2Fsql-quick-study%2Fquestion-ranking

select university,avg(question_cnt) as avg_question,
avg(answer_cnt) as avg_answer_cont
from user_profile
group by university
having
avg_question<5
or
avg_answer_cont<20

4.1.10 对于order by关键字:默认升序,如果要使用降序,利用关键字DESC,eg:

ORDER BY Company DESC

4.1.11 对于.: 表示完全限定的列名或表名。


4.1.12 对于SQL的执行顺序
(图片来源牛客网讨论区)
在这里插入图片描述
SQL执行顺序可以分成四类(按自己的理解,说法不标准):
1)找表和在对应的表上操作(from,join,on,where)
2) 聚合函数(group by)
3)平均、求和、最大、最小函数 (avg,sum,max,min)
4)聚合函数的限制条件(having)
5) 有关表的返回的关键字(select,distinct,order by, limit)

*关于2)3)4)的顺序,可以理解为先按照不同的数据项聚合,比如group by order ,那么就按照不同的order聚合不同的临时表,在临时表上做avg、sum等操作,再按照having限制条件挑选符合的项,最后步骤5)返回

**这种解释仅仅是自己的理解,如有错误,欢迎指正,勿喷

4.1.13 @:SQL Server中所有局部变量名都以@起头

二、关于SQL连接的解释

SQL JOIN 子句用于基于之间的共同字段,把来自两个或多个表的行结合起来。
具体示例看:https://www.runoob.com/sql/sql-join.html

简单总结:
INNER JOIN:如果表中有至少一个匹配,则返回行(即左右表有匹配时才会返回匹配的行)
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行(当左表在右表中没有匹配的时候,匹配上的项正常返回,没有匹配上的部分返回NULL,之所以叫左连接,就是以左表为先)

RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行(和左连接相同的理解,只不过左右表换一下)

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

(A inner join B 取交集。

A left join B 取 A 全部,B 没有对应的值为 null。

A right join B 取 B 全部 A 没有对应的值为 null。

A full outer join B 取并集,彼此没有对应的值为 null。

对应条件在 on 后面填写。)

left join例子:(来自[https://www.runoob.com/sql/sql-join.html])
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值