SQL语法学习记录

#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子句中的运算符

运算符描述
between在某个范围内
like模糊查询
in多个值
=,<,>,<> or !=,>=,<=

####备注

  • 逻辑运算的优先级
    ( ) > 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;
--更新时省略where子句,会更新所有记录,所以一定要注意

###- 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 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为默认值;

####常用数据类型

类型说明
varchar字符串
int整数
decimal(a,b)小数;a表示小数点前后所有位数的总长,b表示保留的小数位数
date日期

####常用约束

类型说明
NOT NULL不允许为空值
UNIQUE不允许重复;每个表可以有多个UNIQUE约束
PRIMARY KEY=NOT NULL & UNIQUE;每个表只能有一个PRIMARY KEY约束

###- 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)
--返回:01 24 2018  6:14PM
--style值代表的格式请参考w3school

###- 日期的计算

DATEADD(datepart,number,date)
--示例:
DATEADD(dd,1,getdate())  --当前+1天
DATEADD(dd,-1,getdate())  --当前-1天
DATEADD(hh,1,getdate())  --当前+1小时
DATEADD(dd,-1,getdate())  --当前-1小时

文章目录


##附:单词记忆

单词读音释义
distinct迪斯’厅科特不同的
column克拉姆
constraint坑死’脆n特约束
varchar哇’克儿字符串
decimal戴思茂小数
unique优’尼科唯一
primary普瑞迈儿瑞主要的;primary key主键
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值