select top 1000 * from Chay_Temp A
where A.field03 between '2019-05-27' and '2019-05-28'
order by convert(int,field02) desc
--top1000* 显示这个表的所有内容后筛选前1000行,A是表别名,方便选择字段
--between and 和(and)什么之间(between [bɪˈtwiːn] 之间)
--order by [ˈɔːdə(r)] 以......排序
--convert(int,field02)将字符串转为( convert [kənˈvɜːt ] 转换)int类型进行倒序(大到小)排序
--desc 倒序;asc 正序se
--order by A.field03 desc 将时间列进行倒序排列
SELECT name,zong,guocheng FROM jisuan ORDER BY CONVERT(zong,SIGNED) DESC limit 50
select distinct field05 from Chay_Temp
--distinct [dɪˈstɪŋkt] 不同的
表达式,条件语句与运算
select top 10 * from Chay_Temp A
where A.field01='贴合'
--选择所有内容后显示顶部10行内容,并定义表别名为A,
--where 在哪里,条件匹配A.field01='贴合' 字段的内容
select top 10
A.Qty,A.OriginalQty,
(A.Qty-A.OriginalQty) www
from Lot A
--选择顶部10行
--在表别名A的两个字段
--将两个字段进行减法运算,并新建一个www的列
--从lot表里面,并建立表别名A
--除法运算将符号 - 更改为 /
--乘法运算将符号 - 更改为 *
--将某个字段的数据下调10%(1为100%,0.1为10%,* 乘以结果为0.9,第三行改为):Qty * (1-0.1) www
--乘法运算将符号 - 更改为 +
--将某个字段加上指定数值(第三行代码更改为):(Qty+123) www
--create table eisc(name varchar(20),td int,years int,leavet int)
--insert into eisc (name,td,years,leavet) values('aaaa','101','2','4'),
--创建表并赋值
select name,(years * 12)-leavet www
from eisc
where name like 'a%'
and (years *12)-leavet>50
--选择name,years(工作了两年)* 12(每年12天假期)减去剩余休假时间,新建一个www列(已休息时间)
--从eisc表里
--在name字段里像a的名字的
--休假时间超过50天的,and(和)当两个表达式为真的时候才会返回为真
select name from eisc
where years <=5
and leavet>10
--选择name字段,从eisc表中找
--在years字段(工作年数)里面找<=5 years
--和leavet(剩余休假) >10天的
select name www
from eisc
where years >=5
and ((years * 12) - leavet)/(years * 12) < 0.5
--选择name字段,并新建一个www列名
--where 在years 找大于5年的
--和 (总休假时间-剩余休假时间)/(总休假时间) < 百分之50的
--将and (交集合)换成 or (并集合)变成,OR:满足其中一个条件就输出结果(前面条件范围加上后面条件范围)
--第四天 函数 对数据的进一步处理
select sum(td) www from eisc
--sum求和td字段的数字(数据),输出到新建的一个字段www
--avg(td) 求td的平均值
--max(td)求td列最大值
--min(td)求td列最小值
-----------------日期时间函数---------------
select GETDATE()+60
--将当前时间增加60天
---------------数学函数-------------------
select abs(td) www from eisc
--abs(td) 将td列中的数值加绝对值,并输出到新增列www
--ceil(td) 将列中的数值取整数
--sqrt(td) 平凡根
--将其转换成弧度(转换成数学三角函数)来计算: cos(A.Qty*0.01745)
select top 10 A.Qty,
cos(A.Qty)
from Lot A
--求Qty列中所有数字的cos值
--从lot表中,并建立表别名A
--exp(A.qty) 以 e 为底的幂值
select top 10
concat(A.Qty,A.OriginalQty) "串接字段内容"
from Lot A
--将int类型转换成字符串类型进行合并
--转换成字符串案例 select 1+2 或 select concat(1,2)
--使用concat() 将两个字段串接起来
-- P 83
select top 10
A.field01,rtrim(field03)
from Chay_Temp A
-- 使用rtrim() 删除列中字符串右边的空格
-- 使用 LTRIM (A.field05, 'S') 删除列中指定字符S
-- A.field01,replace(A.field05, 'SU','qq') ;使用replace(),替换列中的字符,括号里面第一个参数是列,第二个是匹配的字符,第三个是需要替换后的字符
-- A.field01,translate(A.field04, 'LOT','ABC');使用 translate() 匹配对应字符替换,括号里面第一个是列,第二个是列中的字符,第三个是将列中字符一一对应替换成ABC的字符:L换成A,O换成B,T换成C; translate变换
select user from eisc
-- 使用user查询当前数据库下用户名称,eisc为表,任意存在的表
--第五天 SQL 中的子句
group by [ɡruːp baɪ] 分组查询
order by [ˈɔːdə(r) baɪ] 排序依据
union all [ˈjuːniən ɔːl] 进行合并
intersect [ˌɪntəˈsekt] 相交
minus [ˈmaɪnəs] 减去
select top 10
A.field01
from Chay_Temp A
where A.field01 like ('贴%')
--在A.filed01列找像 贴 的字符
select top 90000 *
from Chay_Temp A
order by A.field02 asc
-- 默认 asc 升序排列,倒序排列:desc
select
name,
sum (td),
count (name)
from eisc
group by name
-- 选择 name,
-- td 列数据的总和
-- count() 统计选中列有几行数据
-- group by name 将name中相同的名字进行分组(以什么列中像似名字进行分组)
-- 当前是交集合语句:求name中每组数据的和,并且显示组内行数(相同的有几个名字)
select
name,
max(td),min(td)
from eisc
group by name
-- 选出最大和最小的
-- group by name 将同名分组
-- 也可以平均值 avg 等等
select name,
avg(td)
from eisc
group by name
having avg(td)<130
-- 选择name , 求 td 列的平均数,在eisc表里
-- group by 在 name 列里找相同名字作为一组,进行分组
-- having avg(td)<130 使用having 子句进行增加条件语句
-- 以 name 分组显示:组平均值小于130的数据
-- having avg(td)<130 and avg(years)<10 表示子句增加条件,td<130 且 years<10 的条件(需要在第二行代码后添加 avg(years) )
--第六天 表的联合
p 120
select top 10 * from eisc,Chay_Temp
-- 用逗号直接联合两张表
select sum(eisc.td * www.qc) wwweisc from www,eisc
where www.name='ede' and eisc.name='bbb'
-- sum()求和两个表里面两列中的两个数字,由where来选定,并新建一个wwweisc的列,从www和eisc的两个表里去找
-- 在,www 中的 name列中名为 ede 对应的 qc 数值(与第一行代码 SUM 联系)
-- 和,在eisc表那么列中的名为 ede 对应 qc 的数值 和 eisc 表中 name 列中名为 bbb 名字对应的 td 数值
select www.id,www.name,www.qb,www.qc * eisc.td www
from www,eisc
where www.name = eisc.name
-- 选择要显示的列,两表中的两个字段分别相乘后输出到www新列
-- 两表中两列的字段name 想等,进行合并
select *
from www,eisc
where www.name=eisc.name
-- 不加任何计算的两表合并成一张大表
-- 以name相同的来对应排序
select * from www left join eisc on www.td = eisc.td
-- left join [left dʒɔɪn] 左联接
-- 使用 left join on 函数进行左联接,
-- 显示左表全部行在输出结果的左边,右边:右表与左表相同的才显示数据,否则显示 NULL 为空
-- 使用 right join on 函数进行表的右联接
-- 显示右表的所有行在输出结果的右边显示,左边表与右表没有匹配(相同)的为 NULL 空,在输出结果的左边显示
-- full join [fʊl dʒɔɪn] 完全联接
-- 使用 full join on 函数进行表的全联接
-- 返回左右表的所有行,若左右表没有匹配(相同)部分则显示为 NULL 空
------------交叉联接表-------------
select * from www cross join eisc
where www.name = eisc.name
-- cross join [krɒs dʒɔɪn] 交叉联接
-- 只能用 where 不能用 on
-- 第七天 子查询 内嵌的 SQL 子句
select * from www where name =
(select name from eisc where qc like '1324%')
-- 两个表共有的字段是 name ,子句需要以 name 为选择 name,第一行是主句(www表),但想用另一个表中的字段来匹配
-- 用等号括号来写出子句,属于精准查找(子句表中匹配的字段只有一个数据才能匹配)
select *
from www,eisc
where www.name=eisc.name
and www.name =
(select name from eisc
where td like '111%'
)
-- 先将表进行联合,以两表name相同字段进行合并
-- 联合后,加 and 子句 进行条件进一步赛选
-- www.name www表中的name参数由
-- eisc 表里面 找 td 列 像111字段
-- 对应的 name 参数的那一行数据
use OrBitLCE_Report // 进入数据库
-------------------------------------------------------------------------------------------
SELECT*FROM dbo.ProductRoot where ProductName='03-1-022-1520725'
select FirstSN,SecondSN from SNRelationShip where ProductId='PRD10002HN28'
and CreateDate between '2019-5-1' and '2019-6-1'
and
SecondSN != ''
--------------------------------------------------------------------------------------------
select top 10 * from ProductRoot
where ProductName='03-1-022-1520725'
-- 已知条件 03-1-022-1520725
select b.FirstSN,b.SecondSN
from ProductRoot a, SNRelationShip b
where a.ProductName='03-1-022-1520725'
and b.ProductId=a.DefaultProductId
and IsCancel=0
and b.CreateDate between '2019-5-1' and '2019-6-1'
and SecondSN != ''
-- 先在a表里面查一下记录编码是哪个列,ProductRoot是管理编码的列
-- 选择b表的两个字段,这是我们要的输出结果
-- 从这两个表里,并建立别名,a表 和 b表
-- 两表关联的两个列(相同的数据进行关联),在a表中的 ProductName 字段里面找编对应一行中的 参数
-- 指定排序,初始为0开始
-- 将a表中的 ProductName 匹配字段结果中 对应的ProductRootid列中的参数,传给b表ProductId列进行下一步匹配
-- between and 在什么之间函数,
-- 字段不等于空字符
------------------- 相关子查询 ----------------------
select www.name,
sum(www.td * eisc.td),
count(www.name)
from www,eisc
where www.name=eisc.name
group by www.name
-- 选择www表中的name运用到第六行代码 group by (分组依据)函数进行分组,
-- 求和两表中选中两列的乘积,
-- 计算组数(www表中相同名字(name)为一组,组内的个数)
-- 从两个表中
-- 两表合并关系:两表中 name 列相同
-- group by 分组依据,结构:开头(第一行)和结尾(group by结尾)
having sum(www.td * eisc.td) >
(select avg (www.td*eisc.td)
from www,eisc
where www.name=eisc.name
and www.td=eisc.td
)
-- 在上段结果(有三个数据)(联合后的表中)中显示出:求和的列数值大于平均值列的行
-- 在两表中以name相同进行联合
-- 且两表td列的同等字段(相同的数据所对应的行)(结果两个数据,被条件进一步赛选)
-------------------- exists any all 的使用------------------------
select name, td from www
where exists
(select * from eisc where qc='1324')
-- exists 非空返回 TRUE (显示全部)
-- 与联合两表子查询类似,参照:建立一个子查询(当前小节第一个)
select name, td from www
where name=
any (select name from eisc where name='aaa' )
-- 可以将 any 换成 some
-- 与上一条类似:两表关联子查询
-- 第八天 操作数据
----------- 插入数据 -----------
insert
Powered by ddoss.cn 12.0
©2015 - 2025 ddoss
渝公网安备50011302222260号
渝ICP备2024035333号
【实验平台安全承诺书】
小绿叶技术社区,优化网络中,点击查看配置信息
主机监控系统: 安全防火墙已开启检查cc攻击-下载文件完成后等待10s 恢复访问,检查连接数低于峰值恢复访问
您的IP:216.73.216.110,2025-12-01 15:15:28,Processed in 0.01002 second(s).