6-14 数据库高级

--================先通过设计器手动添加,然后通过代码来添加====
--============手动增加约束==========
--手动删除一列(删除EmpAddress列)
alter table Employees drop column EmpAddress
go--手动增加一列(增加一列EmpAddr varchar(1000))
alter table Employees add EmpAddr varchar(1000)--手动修改一下EmpEmail的数据类型(varchar(200))
alter table Employees alter column EmpAddr varchar(200)
go--为EmpId增加一个主键约束
alter table Employees 
add constraint PK_Employees_EmpId primary key(EmpId)--非空约束,为EmpName增加一个非空约束,修改列为not null
--增加一个非空约束其实就是修改列
alter table Employees 
alter column EmpName varchar(50) not null
go--为EmpName增加一个唯一约束
alter table Employees add constraint
UQ_Employees_EmpName unique(EmpName)
Go--为性别增加一个默认约束,默认为'男'
alter table Employees add constraint
DF_Employees_EmpGender default('') for EmpGender go--为年龄增加一个检查约束:年龄必须在0-120岁之间,含0岁与120岁。
alter table Employees add constraint
CK_Emplpoyees_EmpAge check(empage>=0 and empage<=120)
go--增加外键约束,表Employee中有一列EmpDeptId引用TblDepartment表中的DeptIdalter table Employees add  DeptId int not null
alter table Department add constraint
PK_Department_DeptId primary key(DepId)alter table Employees add constraint
FK_Employees_Department foreign key(DeptId) 
references Department(DepId) on delete cascade--先删除原来的外键
alter table Employees drop constraint FK_Employees_Department--删除某个名字的约束--一条语句删除多个约束,约束名用 逗号 隔开
alter table Employees drop constraintFK_Employees_Department,CK_Emplpoyees_EmpAge,
UQ_Employees_EmpName--用一条语句为表增加多个约束。 
alter table Employees add 
constraint UQ_Employees_EmpName unique(EmpName),
constraint CK_Emplpoyees_EmpAge check(EmpAge>=0 and EmpAge<=120)

 

--===============给列起名的三种方式
select
Fid as 学号,
fname as 姓名,
fage 年龄,
性别=fgender,
数学成绩=fmath,
英语成绩=fenglish
from MyStudent--获得系统时间
select getdate()--top 数字后加percent表示百分比,如果百分比最后计算出来的条数中有小数,则直接进位。
select top 30 percent * from MyStudent order by fage desc

 

--===================distinct去除重复数据=======
select distinct uname,uage from Test2
--==============数据库中的自带函数
--查询数学成绩中,最高分是多少分
select max(fMath) as 数学成绩最高分 from MyStudentselect min(fMath) as 数学成绩最低分 from MyStudent--求总分,求和
select sum(fmath) as 总分 from MyStudent--求班级中的总的记录条数(总人数)
select count(*) as 班级总人数 from MyStudent
--计算平均分的时候对空值不处理
select avg(uscore) from Test3
--count计算的时候也不考虑空值
select count(uscore) from Test3
--求平均分
select avg(fmath) as 平均分 from MyStudent
--====================sql 中的语法
--推荐使用between ... and ...
--between 18 and 24 and也相当于是>=18 and <=24--在1,2,3中选择任意一个班级都返回true
--可以用in()语法替换多个or
select * from TblStudent
where tsclassid in (1,2,3)

 

--------------------------模糊查询=================================
--通配符%表示:任意多个任意字符
select * from Mystudent
where fname like '赵%'--通配符 _ :表示任意的单个字符。
select * from Mystudent--表示x与y之间只要不是'磊'或'伟'的任意单个字符都可以。
--[]通配符,表示中括号中的任意个字符,只选一个匹配。
--[^]表示除了中括号中的任意单个字符。where fname like '赵__'select * from MyStudent
where fname like '%[磊伟]%'select * from MyStudent
where fname like 'x[^磊伟]y'--查询出姓名中包含百分号的
--用[]括起来,就表示转义了。
select * from MyStudent
where fname like '%[%]%'select * from MyStudent
where fname like '%[_]%'--查询出所有不姓赵的同学
select * from Mystudent
where fname not like '赵%' --1.请查询出学生表中所有数学成绩为null的人的信息
--null在数据库中表示unkonw(不知道),判断一个值是否为null,也就不能用=或者<>来判断--查询所有fmath为null的值。
select * from MyStudent where fmath is null--查询所有fmath为非null的值。
select * from MyStudent where fmath is not null--null值与任何数据运算后得到的还是null值。
--就像不知道与1相加结果还是不知道。--注意:同一列上的数据,数据类型必须一致,如果不一致就会报错。所以要求自己定义查询的时候,注意同一列数据类型一致。
--这里的'缺考',只存在与查询出的结果集中,表中的数据没有变化
数学成绩=isnull(cast(fmath as varchar(50)),'缺考')

 

--=================sql中的执行顺序===================
select 
--distinct / top 之类的关键字(这些都是一些现实的选项)
fgender as 性别,  --5>选择列
count(*) as 人数
from MyStudent --1>先从MyStudent表中拿到数据(全部数据的一个结果集)
where fage>30  --2>从MyStudent的数据中筛选出所有年龄大于30岁的人的信息(新结果集,都是年龄大于30的)
group by fgender --3>按照性别分组,分完组以后又得到一个新结果集(分组后的结果)
having count(*)>355 --4>基于分组以后的结果集,然后在筛选,筛选出那些组中记录大于500的组。
order by  人数 desc--6>最后把显示出来的结果排序

 

--=================================================
select 
--tsname as 姓名,
tsclassid as 班级Id,
count(*) as 班级人数
from TblStudent
where tsgender=''
group by TSClassId
--一般分组语句group by 都要与聚合函数配合使用,如果没有聚合函数,分组的意义不大。--当在select查询语句中出现聚合函数时,这时不能在select查询中再出现其他列,除非:该列也在group子句中出现或者也在聚合函数中出现。

 

--========================类型转换============================、
--select 100+'hello'
--select 'hello'+100select 100+'100'select cast(100 as varchar(10))+'hello'
select convert(varchar(10),100)+'hello'select convert(varchar(50),getdate())select convert(varchar(50),getdate())
select convert(varchar(50),getdate(),101)
select convert(varchar(50),getdate(),100)

 

------------------------联合---------------------------------------
--union联合的作用就是将多个结果集并到了一起
select fname,fage from mystudent where fid>999
union all
select tsname,tsage from itcastcn..tblstudent where tsid>12

 

--===================================================
--当联合的时候注意:
--1.多个结果集中的列的数据类型必须一一对应
--2.列的个数必须一样
--联合的时候如果只写union,则会去除重复数据,如果写union all则不会去除重复数据。由于一般情况下我们都没有重复数据,所以也不需要去除,所以我们一般建议使用union all。
--================字符串函数=================
select len('哈哈hello') --返回字符的个数
select datalength('哈哈hello') --返回是字节个数select lower('AaBb')select UPPeR('AaBb')select '==========='+rtrim(ltrim('     aaa       '))+'==============='--从左边数,截取10个字符
select left('hello welcome to China.',10)--从右边数,截取10个字符
select right('hello welcome to China.',10)--从索引为2的开始,截取5个字符。
--注意:1.索引从1开始数。2.含当前索引。
select substring('abcdefghijklmn',2,5)select replace('fjdsalfafdjaslkfjdsakjflksafjdsfjdslkfjdsljf','f','')
select replace(username,'','')

 

=================日期函数===============
select get date()
print convert(varchar(50),)GETDATE() :取得当前日期时间 
DATEADD (datepart , number, date ),计算增加以后的日期。参数date为待计算的日期;参数number为增量;参数datepart为计量单位,可选值见备注。DATEADD(DAY, 3,date)为计算日期date的3天后的日期,而DATEADD(MONTH ,-8,date)为计算日期date的8个月之前的日期 。(入职一年以上的员工发1000$)
DATEDIFF ( datepart , startdate , enddate ) :计算两个日期之间的差额。 datepart 为计量单位,可取值参考DateAdd。
统计不同入学年数的学生个数:
select DateDiff(year,sInDate,getdate()),count(*) from student Group by DateDiff(year,sInDate,getdate())
DATEPART (datepart,date):返回一个日期的特定部分 year(date)   计算日期返回的年份
Datepart可选值
取值别名说明
yearyy,yyyy年份
quarterqq,q季度
monthmm,m月份
dayofyeardy,y当年度的第几天
daydd,d日
weekwk,ww当年度的第几周
weekdaydw,w星期几
hourhh小时
minutemi,n分
secondss,s秒
millisecondms毫秒

 

转载于:https://www.cnblogs.com/cheshui/archive/2012/07/26/2610055.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ptmalloc,tcmalloc和jemalloc内存分配策略研究

转载&#xff1a;https://cloud.tencent.com/developer/article/1173720 操作系统内存布局 各种malloc的内存分配管理方式离不开操作系统的内存布局策略。 32位经典内存布局 32位系统下经典内存布局如上&#xff0c;程序起始的1GB地址为内核空间&#xff0c;接下来是向下增长…

AJAX之表单即时验证

最近互联网上比较火热的话题当然是关于WEB2.0的应用&#xff0c;其中AJAX又是WEB2.0的核心之一。AJAX是Asynchronous JavaScript and XML 的缩写。它并不是一门新的语言或技术&#xff0c;它实际上是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用&#xff0c;它包…

黄聪:PHP获取MAC地址(转)

<?php /** 获取网卡的MAC地址原码&#xff1b;目前支持WIN/LINUX系统 获取机器网卡的物理&#xff08;MAC&#xff09;地址 **/ class GetMacAddr{ var $return_array array(); // 返回带有MAC地址的字串数组 var $mac_addr; function GetMacAddr($o…

Tcmalloc

Tcmalloc Ptmalloc在性能上还是存在一些问题的&#xff0c;比如不同分配区&#xff08;arena&#xff09;的内存不能交替使用&#xff0c;比如每个内存块分配都要浪费8字节内存等等&#xff0c;所以一般倾向于使用第三方的malloc。 Tcmalloc是Google gperftools里的组件之一。…

今天学习的成果

其实主要搞的是数组 还有就是宏的使用。 现将数组代码列出如下&#xff1a; array(){ int a[10],i; printf("Please Input array value"); for(i0;i<10;i) scanf("%d",&a[i]); for(i0;i<10;i) printf("a[%d]%d\n",i,a[i]);} 功能很简…

JVM自动内存管理机制——Java内存区域(下)

一、虚拟机参数配置 在上一篇《Java自动内存管理机制——Java内存区域&#xff08;上&#xff09;》中介绍了有关的基础知识&#xff0c;这一篇主要是通过一些示例来了解有关虚拟机参数的配置。 1、Java堆参数设置 a&#xff09;下面是一些简单的使用参数 其中最后一个是一个运…

PHP版选择排序法

2019独角兽企业重金招聘Python工程师标准>>> <?php// 选择排序法函数function selection_sort(&$array) {$array_length count($array); // 数组的长度$temp 0; // 交换时用到的临时变量for ($i 0; $i < $array_length - 1; $i) {// 认为数组第$i个元…

boost::stable_vector简单解析

由于vector底层实现的机制是一个动态数组&#xff0c;因此使用std::vector<T>时&#xff0c;如果海量数据量时&#xff0c;会导致vector底层的数组很大很大&#xff0c;这样就会导致database很快就会出现内存不足而导致系统停止运行或卡住&#xff0c;这时就要考虑是否用…

PHP程序员面试中经常被提问的问题【转载】

1&#xff0e; Include 与 require的区别&#xff0c;require和require_once的效率哪个高&#xff1f; Php在遇到include时就解释一次&#xff0c;如果页面中出现10次include&#xff0c;php就解释10次&#xff0c;而php遇到require时只解释一次&#xff0c;即使页面出现多次re…

【转】英文论文中“such as, for example, e.g., i.e., etc., et al. ”的用法分析

http://hi.baidu.com/lovegenggeng/blog/item/5d5c594c240830fed72afcd0.html英文论文中“such as, for example, e.g., i.e., etc., et al. ”的用法分析 黄龙旺  龚汉忠 (上海交通大学学报编辑部, 200030,上海) 在英文论文的编辑加工中,常会遇到such as, for example, e. g…

理解zookeeper选举机制

转载&#xff1a;https://www.cnblogs.com/shuaiandjun/p/9383655.html 一、zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的&#xff0c;每个服务器上的数据是相同的&#xff0c;每一个服务器均可以对外提供读和写的服务&#xff0c;这点和red…

使用交互环境

使用交互环境许多脚本语言的解释器都提供了交互环境&#xff0c;我们可通过此环境与计算机沟通交流。为什么叫做交互环境&#xff1f;因为我们在这里通过编程语言与计算机沟通&#xff0c;让它做任何事情&#xff0c;它都会立刻照办并给予我们反馈。运行REBOL 解释器的方式很简…

[原创]K8 cping 3.0大型内网渗透扫描工具

[原创]K8 Cscan 大型内网渗透自定义扫描器 https://www.cnblogs.com/k8gege/p/10519321.html Cscan简介:何为自定义扫描器&#xff1f;其实也是插件化&#xff0c;但Cscan不需要编程同样可实现自定义功能&#xff0c;这比单纯插件化更容易实现插件功能Cscan旨在为用户提供一个高…

std::string的resize()与reserve()的区别

std::string的resize()与reserve()的区别: resize()&#xff1a;改变的是size()与capacity()的大小 (1)、比原来的变小之后&#xff0c;后面的会被截断 (2)、比原来的变大之后&#xff0c;后面的会被填充新的东西&#xff0c;不同的编译器可能会不同 reserve()&#xff1a;…

iMouse - 快速切换鼠标左右键

(此Blog是iMouse软件的官网)【名称】&#xff1a;iMouse【版本】&#xff1a;v1.2 (v1.2是首个公开发布版本&#xff0c;也是最新版&#xff0c;之前版本没有对外发布)【时间】&#xff1a;2012-01-06【关键词】&#xff1a;腱鞘炎、Swap、Mouse、切换、鼠标、鼠标手【功能】&a…

基本排序算法及分析(二):冒泡排序

冒泡排序和改进的冒泡排序 1/**//*------------------------------------------------------------------------------------------- 2Bubble_sort.h 3冒泡排序&#xff1a; 时间复杂度为O(N^2) 4改进的冒泡排序&#xff1a; 时间复杂度仍为O(N^2) 5 一般的冒泡排序方法有可…

洛谷负环板子题

洛谷负环板子题 差点没笑死我 之前的题解都在清一色diss bfs&#xff0c;吹爆dfs 如今改了数据bfs又崛起了&#xff0c;dfs回家种地了&#xff0c;哈哈哈哈哈 dfs版 1 // luogu-judger-enable-o22 #include<iostream>3 #include<cstdio>4 #include<queue>5 #…

std::vector中resize()和reserve()区别

在STL容器中vector用的还是比较多的&#xff0c;但是在使用时&#xff0c;会对resize()和reserve()的使用产生迷惑&#xff0c;现在就对这一情况做个对比&#xff1a; resize()&#xff1a;改变的是size()与capacity()的大小 (1)、比原来的变小之后&#xff0c;后面的会被截断…

设计师和开发人员更快完成工作需求的35个惊人的jquery插件教程(下)

jQuery是一个快速&#xff0c;简洁的工具&#xff0c;它可以遍历HTML文档&#xff0c;处理事件&#xff0c;执行动画&#xff0c;并添加AJAX。jQuery赋予web开发更多的选择机会&#xff0c;使网站产生令人难以置信的元素效果不像之前需要写下几十行代码实现相同的效果&#xff…

C#中一些格式的转换

1、DateTime 数字型 System.DateTime currentTimenew System.DateTime(); 1.1 取当前年月日时分秒 currentTimeSystem.DateTime.Now; 1.2 取当前年 int 年currentTime.Year; 1.3 取当前月 int 月currentTime.Month;1.4 取当前日 int 日currentTime.Day; 1.5 取当前时 int 时cu…