百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

SQL语法学习 - 不用真的记不住

toyiye 2024-06-21 12:34 11 浏览 0 评论

SQL入门级操作,不经常使用的话,也可作为备忘收藏。

SQL学习准备

为了方便练习,在数据库中创建演示数据:

create database TEST;
use TEST ;
----------
go
create table t_icitem 
 (id int primary key,
  name varchar(255),
  model varchar(255),
  alexa varchar(255),
  country varchar(255)
  )
insert into t_icitem values 
('1','oppo','16g','1','CN')
,('2','索尼','8g','13','JAP')
,('3','苹果','8g','2','USA')
,('4','小米','64g','3','CN')
,('5','华为','32g','4','CN')
,('6','魅族','32gm','15','CN')
select * from t_icitem;
----------
create table icstockbillentry
 (id int primary key,
  item_id int not null,
  [count] int not null,
  date date not null
  )
insert into icstockbillentry values 
(1,1,45,'2016-05-10')
,(2,3,100,'2016-05-13')
,(3,1,230,'2016-05-14')
,(4,2,10,'2016-05-14')
,(5,5,205,'2016-05-14')
,(6,4,13,'2016-05-15')
,(7,3,220,'2016-05-15')
,(8,5,545,'2016-05-16')
,(9,3,201,'2016-05-17')
select * from icstockbillentry

SQL初级教程

SELECT

select column_name,column_name from table_name;
--从表中选取部分列
select * from table_name;
--从表中选取所有列

SELECT DISTINCT

select distinct column_name from table_name;
--从列中选取不重复的值;即去重

WHERE

select * from where column_name operator value;
--取符合条件的记录

where子句中的运算符


逻辑运算的优先级

( ) > not > and > or

模糊查询

%:号表示多个字符,_表示一个字符;

M%:查询M开头的值;

%M%:查询包含M的所有值;

%M:查询M结尾的值;

%M_:查询M在倒数第二位的所有值;

AND & OR

select * from table_name 
where column_name > value
and (column_name = 'a' or column_name = 'b');
--and和or可以结合使用,使用括号可以组成复杂的表达式

ORDER BY

select * from table_name 
order by column_name asc,column_name desc;
--排列不写明asc,desc时默认为'asc';
--'asc'表示升序;'desc'表示降序。

INSERT INTO

insert into table_name(column1,column2)
values(1,a),(2,b);
--没有指定列名,则需要插入所有的值

UPDATE

update table_name set column1=value1,column2=value2
where some_column = some_value

update te set te.cloumn = value from table1 te,table2 ti where te.FItemID = ti.FItemID and ti.cloumn operator value
--多个表连接之后,限定条件,更新某个字段

DELETE

delete from table_name where some_column = some_value;
--如果省略where子句,将删除表中所有记录,但不改变表结构、属性、索引等

SQL高级教程

SELECT TOP

select top number percent * from table_name;
--number代表返回的记录数,如:2;
--number后面输入percent代表返回所有行数的百分比

AS

select T1.column_name as A,T2.column_name as B from table_name as T1,table_name as T2
在下面的情况下,使用别名很有用:
--查询中涉及多个表
--查询中使用了函数
--列名很长或可读性差
--需要把多个列结合在一起

JOIN (INNER JOIN)

select * from table_A inner join table_B on A.column = B.column;
--如果条件为空,on后面输入1 = 1即可。

用于把来自俩个表或多个表的行结合起来;join等于inner jion。更多请参考文末链接。

SELECT INTO

select * into table_name_bak from table_name;
--完全复制表,可以看作表的备份;
select column_name,column_name into table_nanme_bak from table_name where column_name operator value;
--复制部分列的满足部分条件的记录到新表;
select T1.column,T2.column into #table from T1 join T2 ON T1.fid = T2.fid;
--复制多个表中的数据到临时表;

INSERT INTO SELECT

insert into table_A(column_name,column_name) 
select column_name,column_name from table_B
where column_name operator value
--复制B表中指定记录插入A表的指定列
INSERT INTO table2 SELECT * FROM table1

CREATE

create database DB_name;
--创建数据库
create table table_name
(
column_name data_type(size) constraint default(value),
column_name data_type(size) constraint default(value),
....
);
--创建数据表;data_type为数据类型;constraint为约束;default为默认值;


ALTER

alter table table_name add column_name data_type(size);
--在表中添加一列;
alter table table_name drop column column_name;
--在表中删除一列;
alter table table_name alter column data_type;
--修改列的数据类型;

DECLARE

--#声明
declare @dept varchar(255)
declare @batchno varchar(255)
declare @starttime date
declare @endtime date
--#赋值
set @dept = ''
set @batchno = ''
set @starttime = '2017-01-01'
set @endtime = '2017-12-30'
    --或者
select @dept = '',@batchno = '',@starttime = '2017-01-01',@endtime = '2017-12-30'
--#使用
slect * from t1,t2,t4 where 
t4.FName like '%'+@dept+'%'--like比较值格式:'%'+@变量+'%'
and t2.FBatchNo like '%'+@batchno+'%'
and t1.FDate >= @starttime
and t1.FDate <= @endtime

IF (NOT) EXISTS

  • 1.介绍

if not exists 即如果不存在,if exists 即如果存在

  • 2.使用

a.判断数据库不存在时

if not exists(select * from sys.databases where name = 'database_name')

b.判断表不存在时

 if not exists (select * from sysobjects where id = object_id('table_name') and OBJECTPROPERTY(id, 'IsUserTable') = 1)

c.判断列不存在

  if not exists (select * from syscolumns where id=object_id('table_name') and name='column_name')

当判断的结果不存在时,我可以执行创建数据库,创建表,增加列,可以执行相应的SQL语句;

而if exists同理判断,首先判断查询结果是否存在,如果存在执行判断后面的语句,查询的数据库,表,列的方法相同;

SQL骨灰教程

CONVERT

convert(clume_type(length),date,style)

--示例:

select convert(varchar(20),getdate(),100)

COUNT

select count({*,colume,index}) from table_name [where 条件]
--统计记录数
select count(distinct colume) from table_name [where 条件]
--统计不重复的记录数

日期的计算

DATEADD(datepart,number,date)

--示例:

DATEADD(dd,1,getdate())  --当前+1天
DATEADD(dd,-1,getdate())  --当前-1天
DATEADD(hh,1,getdate())  --当前+1小时
DATEADD(dd,-1,getdate())  --当前-1小时

REPLACE

update [表名] set 字段名 =replace(与前面一样的字段名,'原内容','想要替换成什么') [where 可以限定条件]
-- 字符串替换函数

DELETE和TRUNCATE区别

  • 区别1:

DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。在删除过程中激活与表有关的删除触发器。TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

  • 区别2:

表和索引所占空间。当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,而DELETE操作不会减少表或索引所占用的空间。drop语句将表所占用的空间全释放掉。

  • 区别3:

应用范围。TRUNCATE 只能对TABLE;DELETE可以是table和view。

  • 区别4:

对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。

  • 区别5:

DELETE自动编号不恢复到初始值。TRUNCATE自动编号恢复到初始值。

查询bak备份文件的版本

restore headeronly from disk=N'D:\chl\SQL.bak'



常见系统存储过程

exec sp_databases
--查看数据库
exec sp_tables
--查看表
exec sp_columns table_name
--查看数据表的列
exec sp_helpIndex table_name
--查看索引
exec sp_helpConstraint table_name
--约束
exec sp_stored_procedures
--查看存储过程
exec sp_helptext '存储过程名[触发器名]'
-查看存储过程[触发器]的SQL语句
exec sp_rename table_name , table_rename
--修改表、索引、列的名称
exec sp_help table_name
--查询表的信息
exec sp_helpdb database_name
--查询数据库信息
exec sp_helpfile database_name
--查询数据库文件信息
exec sp_helpfilegroup ['文件组名']
--数据库文件组信息

查询存储过程和触发器

select * from sysobjects where xtype = 'TR'
--查询系统中所有的触发器
select * from sysobjects where xtype = 'p'
--查询系统中所有的存储过程
select distinct object_name(id) from syscomments where id in
(select id from sysobjects where type ='p') and text like'%TableName%'
--查询表名被哪些存储过程用到过

希望详细了解触发器和存储过程的童鞋请看这里:SQL触发器入门 - 触发器的原理及常用存储过程

附:单词记忆


相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码