sql笔记(1)

/*注意:SQL中不区分大小写的
新增的:
--备份数据库
backup database database_name to disk='url\name.bak'--database_name 一定不能加单引号的‘’,另外为备份的数据库区别名.bak
--回复还原数据库
restore databse database_name from disk='url\name.bak'--还原的数据库名子可以自定义的
--重命名数据库
sp_renamedb 'database_oldName','database_newName' --更改数据库名称这里的单引号必须有的
--重命名表
sp_rename 'table_oldName','table_newName' --忘记两个表明之间的逗号
--重命名列
sp_rename 'table.字段名','new 字段名','column  '              
 --查看表的信息
sp_help table_name  --1  
sp_columns  table_name  --2
sp_pkeys  table_name   --查看主键信息
多列的主键约束
alter table table_name add constraint name primary key(字段1,字段2) 
删除主键
alter table table_name drop constraint name 

case
  when   then
  when   then
  else 
end 
数据转换
1.cast cast(@a as varchar(10))
2.conver (varchar(10),@a) 
len('aaaa')--求字符的长度
*/


--建库
create database database_name
--1建表(外键在允许为空的情况下是可以null的)
create table table_name
(
    stu_no int identity (1,1) ,
    stu_name char(10) not null,
    stu_age  int check(stu_age <60 and stu_age >20) not null,
    stu_sex  char(2)  check(stu_sex = '男' or stu_sex ='女') default'男'
                                                
)--显示 select *from stu_info
--2【插入数据】
--.1向所有的列插入数据:
 (identity 标识列自增的,不用插入数据,也不用null占位,否则会报错 在有标识列的表中插入数据时,即使插入数据错误,但是标识列也在自增;
 比较:在mysql中 自增列是 auto_increment 且必须是主键 primary key
default 必须有数据 在允许为空时是null 也行,插入null 则值就是null 不会是默认值 ' ' 同理                           
--.2向指定的列插入数据
 identity 标识列也是不能插入 总之标识列不能插入数据的 ;
default  默认值 不向其插入值时是默认值
--3【改数据库名】
          --语法:alter database 原数据库名 modify name= 新库名
     alter database 笔记 modify name = 同学信息表   但分离是还是原数据库名
--4【改表增/删列】
--a.增加新列 语法:alter table  表名 add 列名 列名的类型 约束
alter table  stu_info add  stu_adress  varchar(10) not null default '郑州' --非空时一定要有一个默认值
alter table  stu_info add stu_tel int
--b.删除列 语法:alter table  表名 drop  column 列名  [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
alter table stu_info  drop column stu_no --没有约束能够直接删除列(这里的约束不包括 null , not null)
alter table stu_info drop column stu_adress--有约束不能直接删除,则必须先删除约束 再删除列
alter table stu_info drop DF__stu_info__stu_ad__79A81403 -- DF__stu_info__stu_ad__79A81403 删除列时的出现的约束的地址
-c.修改
 alter table table_name alter column_name 约束  《一般是null 在有数据时不能为not null》
alter table stu_info alter  column stu_name char(10) not null
--【删除一条数据】
  --语法:delete from 表名 where 条件1--这里不加where条件 会删除全部数据
 --删除‘张军’中的数据
delete from stu_info where  stu_name='张军'--张军的所有信息都删掉了
--------------------------------------------------------------------------------------------显示 select *from stu_info
--删除具有 统一特性 的数据
--删除性别是男的数据
delete from stu_info where stu_sex='男'--男士的所有信息全都删除
delete from stu_info where stu_no IN (3,4)--通过使用IN关键字
--【查询数据】
 --语法1:select *from 表名                     《查询的是 (这个表中) 所有列的数据》
 --语法2:select 列名1 from 表名1 where 条件1    《查询的是表名1中符合条件1的列名1的数据》
                --语法3:select *from 表名1 where 条件1         《查询的是表名1中符合条件1的  所有列 的数据》
select stu_name from stu_info  --没有where条件查询的是表中所有的 stu_name 数据
select * from stu_info where stu_adress='金水路11号'
select stu_no AS 学号 ,stu_name  姓名,stu_age 年龄  from stu_info where stu_age <60 and stu_age > 50--通过AS ,空格 ,= ,为列取别名
select   distinct stu_name AS 姓名 from stu_info where stu_age <60 and stu_age > 40 --通过使用关键字distinct 把不同的屏蔽掉
select  stu_no AS 学号,stu_name 姓名,stu_age 年龄 from stu_info  where stu_no IN (4,8)--通过使用IN关键字查询 有其一就成立
--查询结果排序 order by        desc
select stu_name AS 姓名,stu_age 年龄 from stu_info  order by stu_age  desc--使用 order by stu_age desc按年龄从大到小排列
select top 3 stu_name as 姓名 from stu_info order by stu_age desc         --使用top关键字  top n 或 百分比    查询前 n行 数据


------------------------------------另一个数据库的表中
--查询结果分组group by
create database chshi
alter database chshi modify name= 超市

create table huo
(
  title char(20) not null,
  type char(20) not null,
  price float not null,
  priduct_id int not null
)
insert into huo values ('洗衣粉','日用品',4.8,2000)
insert into huo values  ('牙刷','日用品',2.0,2500)
insert into huo values ('apple糖','食品',5.0,1000)
 ---------------------------------------select *from huo
select title as 名称, sum(priduct_id)as 数量 from huo group by title <order by title> --查寻每种商品的数量
   --sum函数      --可以不写

          --avg函数
--select type as 类型,avg(priduct_id*price)as 平均价 from huo group by type order by type
select title as 名称,type 类型 ,avg(priduct_id*price)as 平均价 from huo group by title,type order by title,type
                       --使用count函数查询每种类型中有几种产品
select type as 类型,count(title) as 种类数 from huo group by type order by type

select type as 类型,title 名称 , max(price)as 最高价格 from huo group by type ,title order by type ,title/**/
select type as 类型,title 名称, sum(priduct_id*price)as 订单价格 from huo group by type ,title having sum(priduct_id*price)>7000
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/***************************************************************************************************************************************************************************/***/
-- 创建数据库
create  database  stu_info --创建  创造  ddl create database 数据库名
  go
--drop database stu_info--删除数据库  ddl create drop alter
create database student2
use stu_info  --以后每一步操作 都存到这个数据库中
create table student1--创建表  在stu_info中  表名
(
  --表中应该有相应的字段   列名
  stu_num int constraint stu_num_union unique,
  stu_name varchar(8) not null,
  stu_age int check(stu_age<100 and stu_age>0),--and 相当于逻辑与  与符
  stu_sex char(4)
)
create database 胡书然
/*  unique 唯一约束
    语法:constraint 字段名后面_union  unique
    强迫给某一字段和unique约束建立关系
    unique和primary key 不允许有相同值 重复值
                        unique允许有一个是空值
    default约束:防止空值 给他一个默认值
    default ‘男’ 有效防止空值 防止无效值出现 
在企业管理其中怎样设置默认值:打开表界面 =》 找到操作表右键
=> 设计表 =》 下方默认值中,设置相应默认值
    */
--修改表 alter DDL database define language
---------------------------ddl 对象是表,库---------------------------------------
--create 创建   drop删除    alter修改
/*修改表的操作
   alter语法有几种
     1.add方式    增加列 
       语法:alter table 表名 add 列定义、完整性定义
例:在stu_info中添加两个字段 班级号列  地址列 列名 */
alter table student1 add cla_id int
 
alter table  student1 add address varchar(10)

 /*  2、alter方式          修改列的属性
      语法:   alter teble 表名 alter  column 列名 类型    
例:把address列宽增加到20
    alter table   student1
    alter column  address varchar(20)
注意问题:1、不能修改列名 字段名称
      2、不能将已定义可以有空值的列定义修改成 not null
    3、若已有数据不能减少数据列,也不能修改数据类型
     4、只能修改null或者not null约束,其他类型约束放在修改前
             必须删除,然后重新创建修改过的列的约束。*/
-- 3.drop  删除表    约束
alter table 表名 drop column 列名                     ----删除列
  drop database 数据库名                              ----删除数据库
  drop table 表名                                     ----删除表
  drop constraint 约束名                              ----删除约束
-----------------dml-----对象是数据---------------
 1.insert   into 表名 values 数值  -----插入数据
 2. select *from 表名1        ----查询表1中所有列的数据
    select 列名1 from 表名1         ----查询表1中列名1的数据
 3. update 表名 set  列名=更新的值 where 条件      ----更新数据
 4.delete from 表名 where 条件  ----删除的是一条记录数据
1.语法:insert into 表名 [列名1,列名2.... ] values 【值1,值2....】
     列名数量须和值的数相对应,如果不写列名,直接插入值时,空值应该‘
     空出(在所在的列允许为空的前提下)
例:在student1表中插入一学生数据
    学号   007
    姓名   007
    性别   男
    年龄   20
    班级好 1
insert into student1 values(007,'007',20,'男',1,'')
 
注意:1.1、必须使用逗号将各个数据分开,字符型,时间类型 用单引号 '' 分隔
      1.2、每条记录必须在每个属性上都有values值,且值在自居中的 ,排列应和表中值的顺序一致。
      1.3、对于into子句,没有出现的列,保留空值位置
      1.4、在表定义时,有not null约束的属性列,将不能去空值
--2.select 查询 查询语言 select where
--select用于查询数据,也可以用来调用函数或者局部变量
语法:select 选择列表(* 代表表中所有的列) from  表名 where 检索条件
  注意:2.1、选择列表中,可以包含几个列名或者表达式,用逗号隔开
             用来指示返回那些数据,
         from子句,包含提供数据表的名称   从那里查询
        2.2、当选择列表中含有列名时,每一个select子句必须有一个from子句
    where用于写出检索条件。
--查询全体学生所有信息
  select * from student1    
select stu_age
from student1
where stu_name='胡书然'
--3.update修改,更新
  语法:update 表名 set  列名=更新的值 where 条件 
  
  例:update用于修改表中已经存在的数据
      可以一次修改多行,也可以修改一行
  例:修改一行:把007 的 姓名换成  胡书然
  update student1
  set stu_name='胡书然'
  where stu_age=20
  例:将所有学生年龄全部加1
  update student1
  set stu_age=stu_age+1
  where stu_age<22
  insert into student1 values(321,'0012',20,'男',1,'')
--5.delete 删除
  where 要删除记录的条件
  可以删除一行 也可以删除所有数据
  没有where就是删除所有数据 
delete from student1
go
drop table student1
select * from student1
delete from student1
where stu_name='胡书然'


今天:语言  ddl  create drop alter
            dml  update  delete  insert  select
            dcl  grant revoke

时间函数:
select getdate()
select year('2000-10-10')
select year(getdate())
select datediff(hour,'1988-10-01',getdate())

原文地址:https://www.cnblogs.com/top100/p/2092736.html