数据库查询的基本格式为:

select          ----输出(显示)你要查询出来的值

from           -----查询的依据

where         -----筛选条件(对依据(数据库中存在的表))

group by      -----对筛选后的数据 进行分组

having        ----- 筛选条件(对分组后的结果再次筛选)

order by      -----将结果进行排序

注意:基本语法格式顺序不能变,顺序不能变,但可以缺省

表结构操作

表结构操作是需要去修改表结构,使用的关键字是alter,其他方式无法对表进行操作的时候,比如,新增列,删除列,修改列类型等操作,就需要使用alter方法了。

新增列

alter table stu
add sid int

删除列

alter table stu
drop column sid

修改列类型

alter table stu
alter column sid char(1)

修改列类型需要注意的是:如果列中有数据,则不能修改该列数据类型

新增约束

alter table stu
add constraint ck_ssex check (ssex=0 or ssex=1)

新增两列

alter table stu
add siphone nchar(11),smoney money

删除约束

alter table stu
drop ck_ssex

SQL函数

SQL函数分为五类,字符串函数,日期函数,数学函数,系统函数,聚合函数

字符串函数如下表所示:

函数名

描述

举例

charindex

用来寻找一个指定的字符串在另一个字符串中的起始位置

select charindex('apple','this is apple',1)返回值为:9

len

返回传递给它的字符串长度

select len('yihuqingjiu')

返回值为:11

lower

把传递给它的字符串转换为小写

select lower('YIHUQINGJIU')

返回值为:yihuqingjiu

upper

把传递给它的字符串转换为大写

select upper('yihuqingjiu')

返回值为:YIHUQINGJIU

ltrim

清除字符左边的空格

select ltrim(' yihuqingjiu ')

返回值为:yihuqingjiu ,左边空格被清除

rtrim

清除字符串右边的空格

select rtrim('yihuqingjiu ')

返回值为: yihuqingjiu,右边空格被清除

right

从字符串右边返回指定数目的字符

select right('yihuqingjiu',3)

返回值为:jiu

replace

替换一个字符串中的字符

select replace('yihuqingjiu','yi','wen')

返回值为:wenhuqingjiu

stuff

在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符串

select stuff('yihuqingjiu',3,6,'wen')

返回值为:yiwenjiu,3,6指的是,以第三个字符开始,往后6个字符都删除

日期函数如下表所示:

函数名

描述

举例

getdate

获取当前的系统日期

select getdate()

返回值为:当前的时间日期

dateadd

将指定的数值添加到指定的日期部分后的日期

select dateadd(dd,4,'17/6/17')

返回值为:2017-06-21,年为yy,月为mm,日为dd,所以上述代码在日为17的基础上加4

datediff

两个日期之间的指定日期部分的区别

select datediff(mm,'17/8/15','17/10/15')

返回值为:2,月份相差2,年月日表示方法同上

datename

日期中指定日期部分的字符串形式

select datename(dw,'17/10/7')

返回值为:星期六

datepart

日期中指定日期部分的整数形式

select datepart(day,'17/10/7')

返回值为:7

日期参数及缩写如下表所示:

日期部分

缩写

year

yy, yyyy

quarter(表季度,返回1-4)

qq, q

month

mm, m

dayofyear(在当前时间的多少天)

dy, y

day

dd, d

week

wk, ww

weekday

dw

hour

hh

minute

mi, n

second

ss, s

millisecond

ms

数学函数如下表所示:

函数名

描述

举例

abs

取数值表达式的绝对值

select abs(-1025)

返回值为:1025

ceiling

返回大于或等于所给数字表达式的最小整数

select ceiling(28.9)

返回值为:29

floor

取小于或等于指定表达式的最大整数

select floor(28.9)

返回值为:28

power

取数值表达式的幂值

select power(8,2)

返回值为:64

round

将数值表达式四舍五入为指定精度

select round(36.55789,3)

返回值为:36.55800

sign

对于正数返回1,负数返回-1,0则返回0

select sign(36)

返回值为:1

sqrt

取浮点表达式的平方根

select sqrt(16)

返回值为:4

系统函数如下表所示:

函数名

描述

举例

convert

用来转变数据类型

select convert(nchar(3),123)

返回值为:123

current_user

返回当前用户的名字

select current_user

返回值为:用户分组名,dbo或guest

datalength

返回用于指定表达式的字节数

select datalength('用户分组名dbo')

返回值为:13,汉字占两个字节

host_name

返回当前用户所登录的计算机名字

select host_name()

返回值为:所登录的计算机名

system_user

返回当前所登录的用户名称

select system_user

返回值为:当前登录名,比如sa

user_name

从给定的用户ID放回用户名

select user_name(1)

返回值为:dbo,括号中数字不同返回的数据也不同

聚合函数如下所示:

min ---最小

max ---最大

sum ---和

avg ---平均

count ---统计(个数)

需要注意的是:聚合函数需要和分组group by一起使用

例:

select avg(成绩)
from student
group by 科目

高级查询

查询中where与having的区别:

本质上没有区别,都是对数据做筛选,只不过 where对原始表中的数据筛选,而having是对分完组后的数据筛选

去重复的关键字是distinct

例:

select distinct depart
from teacher

多表查询

多表查询需要将表连接在一张表中做查询操作,连接表有如下几种方式

1.全连接(笛卡尔连接)

2.左连接

3.右连接

4.内连接

第一种连接方式语法为:

select *
from 表1,表2
where 表1.列=表2.列

第二种连接方式的语法为:

select *
from 表1 left join 表2 on 表1.列=表2.列

第三种连接方式的语法为:

select *
from 表1 right join 表2 on 表1.列=表2.列

第四种连接方式的额语法为:

select *
from 表1 inner join 表2 on 表1.列=表2.列

子查询

子查询分为四种,where子查询、from子查询、in子查询和exists子查询

where子查询是将一个查询的结果作为另一个查询的条件

from子查询是将一个查询的结果作为另一个查询的来源(表)

in子查询是指要查询的数据包含其中

exists子查询是判断某数据是否存在

where子查询例:

select stuName
from stuInfo
where stuNo=(select stuNo from stuMarks where writtenExam=60)

where条件查询:

  a. 比较运算符 = ,!=(<>),< > <= >=

  b. like , not like ('%'匹配任意多个字符,'_'匹配任意单个字符)

  c. in , not in , between and

    in,匹配多个数据

    like,模糊查询,对字符、字符串使用

    shop_price between 1000 and 3000

  d. is null , is not null

通配符如下表所示:

通配符

解释

示例

‘_’

一个字符

A Like 'C_'

%

任意长度的字符串

B Like 'CO_%'

[ ]

括号中所指定范围内的一个字符

C Like '9W0[1-2]'

[^]

不在括号中所指定范围内的一个字符

D Like ‘%[A-D][^1-2]'

from子查询例:

select *
from (select * from score,grade where degree>low and degree< upp) as a
where rank='A'

in子查询例:

select stuName
from stuInfo
where stuNo in (select stuNo from stuMarks)

exists子查询例:

if exists(select * from sys.databases where name='new')
drop database new

其中sys.databases是指系统中所有的数据库,exists返回值是true或false

一般来说,表连接都可以用子查询替换,但有的子查询却不能用表连接替换。子查询比较灵活、方便,常作为增删改查的筛选条件,适合于操纵一个表的数据,表连接更适合于查看多表的数据。

排序

排序分为降序和升序,很简单,看个例子就明白。

升序例:

select *
from student
order by sno asc

降序例:

select *
from student
order by sno desc

按多列排序:

select *
from student
order by sno asc,scj asc

排序需要注意的是,若排序字段没有name,在select显示是输出不了的。

限制固定行数显示:

select top 5 sname,saddress
from student
where ssex=0

也可以用*代表所有列

返回百分之多少行:

select top 20 percent sname,saddress
from student
where ssex=0

SQL server学习(二)表结构操作、SQL函数、高级查询的更多相关文章

  1. Sql Server 导出数据库表结构的SQL查询语句

    --导出数据库所有表 SELECT 表名 Then D.name Else '' End, 表说明 Then isnull(F.value,'') Else '' End, 字段序号 = A.colo ...

  2. sql server抓取表结构的语句

    sql server 2008抓取方法: ---------------------------------------   SELECT      表名 = Case When A.colorder ...

  3. SQL Server 动态创建表结构

    需求是,在word里面设计好表结构(主要在word中看起来一目了然,方便维护),然后复制sql 里面,希望动态创建出来 存储表结构的表 CREATE TABLE [dbo].[Sys_CreateTa ...

  4. (转)Sql Server 快速查看表结构(表描述及字段说明)

    --表描述 SELECT tbs.name 表名,ds.value 描述 FROM sys.extended_properties ds LEFT JOIN sysobjects tbs ON ds. ...

  5. MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建

    前言 在操作数据库的时候经常会用到判断数据表.视图.函数/方法.存储过程是否存在,若存在,则需要删除后再重新创建.以下是MS SQL Server中的示例代码. 数据表(Table) 创建数据表的时候 ...

  6. SQL Server 的数据表简单操作

    --创建数据表--[use 要创建数据表的数据库名称go]create table 要创建的表名(字段名 数据类型[长度] [null | not null] [primary key],... .. ...

  7. SQL Server 2012 - 数据表的操作

     unicode:双字节编码      variable:可变的    character:字符 T-SQL:  Transact Structured Query Language unique:唯 ...

  8. sql server 2000系统表sysproperties在SQL 2008中无效的问题

    Sqlserver有一个扩展属性系统表sysproperties,因为只接触过MSSQL2005及以后的版本,在生产库2008版本及联机文档上搜了下都找不到这个系统表,后来发现这个系统表在2005版本 ...

  9. Microsoft SQL Server学习(五)--操作符聚合函数

    算术运算符 逻辑运算符 比较运算符 聚合函数 算术运算符(+ - * / ) select score*2 as 成绩翻倍 from class_A update class_A set score= ...

随机推荐

  1. C# 委托详解(一)

    1.委托简单例子 class eeProgram { // 声明delegate对象 public delegate string CompareDelegate(int a, int b); // ...

  2. 谈谈对Python的感想

    写在前面 我用Python已经好几年了,最早学习用Python还是因为对人工神经网络感兴趣,python有个很好用的ANN库neurolab.本人其实也算初学者,充其量算入门了吧,写这篇一来回顾自己所 ...

  3. ZooKeeper如何保证单一视图

    由于ZooKeeper的数据模型简单且全部在内存中,ZooKeeper的速度非常快.它提供了一系列保证: • 顺序一致性 • 原子性 • 单一视图 • 可靠性 • 实时性 下面将结合源码(3.4.10 ...

  4. openstack操作之一 命令行

    在openstack环境中提供了多种操作虚拟机的方法,有最简单直接的dashborad界面,有不直观但高效的命令行,还有进阶版的postman调用openstack restfulapi和命令行中使用 ...

  5. Windows as a Service(3)——使用SCCM管理Windows10更新

    Hello 小伙伴们,这是这个系列的第三篇文章,我已经和大家分享了有关于Windows 10服务分支以及利用WSUS管理更新的方式,有兴趣的小伙伴们可以参考下面的链接: Windows as a Se ...

  6. Lucene分词停用词库stopwords

    ! " $ % & ' ( ) * + , - -- . .. ... ...... ................... ./ .一 .数 .日 / // 0 1 2 3 4 5 ...

  7. 第一个Vue插件从封装到发布

    前言 这是我封装的第一个Vue插件,实现的功能是滑动选择省市区,虽然只是一个简单的插件,但还是挺开心的,记录一下步骤. 插件地址:https://github.com/leichangchun/vue ...

  8. css3毛玻璃模糊效果

    CSS3 blur滤镜实现如下测试代码: .blur { -webkit-filter: blur(10px); /* Chrome, Opera */ -moz-filter: blur(10px) ...

  9. 【JavaScript 】for 循环进化史

    ECMAScript 6已经逐渐普及,经过二十多年的改进,很多功能也有了更成熟的语句,比如 for 循环 这篇博客将介绍一下从最初的 for 循环,到 ES6 的 for-of 等四种遍历方法 先定义 ...

  10. swiper轮播问题之二:默认显示3张图片,中间显示全部两边显示部分

    其二:项目遇到比较有点要求的轮播图,默认显示3张图片,中间显示全部,两边显示部分.如图: 网上找了也没有找到合适的,最后经过自己摸索写了出来,贴出代码分享给大家.         CSS .swipe ...