sql

123 阅读1分钟

use dbName --使用当前数据库

create database dbName --创建数据库

drop database dbName --删除数据库

--创建表

Create table Product(

Product_id char(4) not null,

Product_name vachar(100),

Primary key (product_id)

)

Alter table aaa add aaa_Name varchar(100) --添加字段

Drop table shop --删除表

truncate table shop

delete table shop

Alter table shop add age int --向shop表添加age字段

Alter table shop drop column age --向shop表删除age字段

Insert into shop values(‘001’,’商店’) --向表shop中添加数据 001 商店

sp_rename 'shop','shop1' 更改表shop名为shop1

Select distinct age from shop --去除重复

Select shop_id,shop_name from shop where shop_name is null--选取为空

Select shop_id,shop_name from shop where shop_name is not null--选取不为空

Select count(*),count(age) from shop --行数

Select sum(age) from shop --合计

Max最大值 min最小值 avg平均值

书写顺序

  1. SELECT 子句 → 2. FROM 子句 → 3. WHERE 子句 → 4. GROUP BY 子句 →

  2. HAVING 子句 → 6. ORDER BY 子句

Sql执行顺序

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

事物

begin tran

begin

update product set sale_price=123 where product_id=1

update aaa set Uid=123 where ID=1

if(@@error<>0)

 begin

 rollback

 end

else

begin

commit tran

end

end

select LOWER(product_name) from product --将英文字母转换为小写

select UPPER(product_name) from product--将英文字母转换为大写

SUBSTRING(对象字符串,截取的起始位置,截取的字符数) 截取字符串

REPLACE——字符串的替换

REPLACE(对象字符串,替换前的字符串,替换后的字符串)

SELECT CAST(CURRENT_TIMESTAMP AS DATE) AS CUR_DATE;--获取当前日期2020-10-16

SELECT CURRENT_TIMESTAMP;--获取当前日期和时间 2020-10-16 15:47:03.197

SELECT CURRENT_TIMESTAMP, --截取日期元素

DATEPART(YEAR , CURRENT_TIMESTAMP) AS year, --年

DATEPART(MONTH , CURRENT_TIMESTAMP) AS month,

DATEPART(DAY , CURRENT_TIMESTAMP) AS day,

DATEPART(HOUR , CURRENT_TIMESTAMP) AS hour,

DATEPART(MINUTE , CURRENT_TIMESTAMP) AS minute,

DATEPART(SECOND , CURRENT_TIMESTAMP) AS second;

写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。

1.--top+not in

select TOP 10 * from A WHERE ID NOT IN(SELECT TOP 30 ID FROM A)

2.--row_number over+between and

select * from ( select ROW_NUMBER() over(order by ID asc) as row ,* from A) as atable

where row between 1 and 10

linq语句分页

        var list= (from e in db.Musics select e).ToList();
        var reslist = list.Skip((page-1)*10).Take(limit).ToList();

case搜索表达式

Case when then

select product_name,

case when product_type='衣服'

then 'A:' + product_type

when product_type='办公用品'

then 'B:' + product_type

when product_type='厨房用具'

then 'C:'+product_type

else null

end as abc_product_type

from product

SELECT product_id, product_name

FROM Product

UNION --合并两张表的数据

SELECT product_id, product_name

FROM Product2;

将已有编号方式转换为新的方式并统计 case when then else end sum group by

20210201201452532.png

20210201201025128.png

在“统计结果”这张表中,“四国”对应的是表 PopTbl 中的“德岛、 香川、爱媛、高知”, “ 九州”对应的是表 PopTbl 中的“福冈、佐贺、长崎”。

Select case pref_name

When ’德岛’then ’四国’

When ’香川’then ’四国’

When ’福冈’ then ’九州’

When’佐贺’then‘九州’

Else ‘其他’ end,sum(population)

from PopTbl

Group by case pref_name

When ’德岛’then ’四国’

When ’香川’then ’四国’

When ’福冈’then ’九州’

When ’佐贺’then‘九州’

Else ‘其他’ end

select pref_name,

sum(case when sex='1' then population else 0 end) as '男',

sum(case when sex='2' then population else 0 end) as '女'

from PopTbl

group by pref_name

工资大于30000降薪10%,

UPDATE Salaries

SET salary = CASE WHEN salary >= 30000

THEN salary * 0.9

WHEN salary >= 250000 AND salary < 28000

THEN salary * 1.2

ELSE salary END;

20210201201621249.png

获取只加入了一个社团的学生的社团 ID。

获取加入了多个社团的学生的主社团 ID

SELECT std_id, MAX(club_id) AS main_club

FROM StudentClub

GROUP BY std_id

HAVING COUNT(*) = 1;

SELECT std_id, club_id AS main_club

FROM StudentClub

WHERE main_club_flg = 'Y' ;

查找重复数据

select 姓名 from 表 group by 姓名 where count(姓名) > 1

查找n高数据

查询两张表相同的数据 select * from table1 intersect select * from table2

查询两张表不同的数据

select * from table1 except select * from table2