【个人笔记】SQL操作基础

1.主键

分为逻辑主键与业务主键。

业务主键:具有真实意义的,比如身份证、银行卡等,一旦变化,难以维护。

逻辑主键:没有任何实际含义,只为了标识当前列在当前数据表里的位置的唯一标识。

不可以手动编辑,特殊情况下除外。

·每一张表都推荐有标识列·

·推荐使用逻辑主键·

·每一张表都推荐有主键列,并设置标识·

·主键标识列,就算数据被删除了,也会按照原先的标识增长

命令方式创建数据库

create database MySchool –数据库名

on

(

name=’MySchool_data’, –数据库名称

filename=’d:\MySchool_data.mdf’, –物理文件名

size=5mb, –初始大小

maxsize=10mb, –最大文件大小

filegrowth=15% –主文件增长率

)

log on

(

name=’MySchool_log’, –日志文件名

filename=’MySchool_log.ldf, –日志物理文件名

size=2mb,

maxsize=4mb,

filegrowth=1mb

)

go

命令方式创建表 - 要先选择要 创建表的位置

格式:

列名 类型 标识 主键 是否允许为空

id INT IDENTITY(1,1)

create table Student

(

id INT IDENTITY(1,1) PRIMARY KEY,

name NVARCHAR(16) NOT NULL,

age INT NOT NULL

)

DML数据库操作语言

·增删查改

·增加数据

INSERT INTO 表名(…列名) VALUES(…要插入的数据)

· INSERT INTO 表名 VALUES(…要插入的数据) –完全插入

· INSERT INTO 表名(…要插入的列名) VALUES(…对应的数据) –选择性插入

    注意:
        1.插入数据的时候,bit字段要用"0/1"表示True/False
        2.时间字段要用单引号括起,单引号中的内容要遵循基本的时间格式,如‘2014-10-10’
        3.INSERT语句中列的数目要和VALUE后值的数目一致
        4.不能为标识列插入数据(特殊情况下可以,SET IDENTITY_INSERT 表名 ON)(同理  SET IDENTITY_INSERT 表名 OFF)
        5.直接拖拽‘列’可以快速插入列名
        6.除了标识列,其他所有字段的值都要写出来,而且还要按照顺序写出来
        7.数据表中的 NULL 不是空指针也不是空字符串,而是表示数据库不知道为何值
        8.在服务器上执行的代码中显示的 UNICODE字符串常量 必须以大写字母 N 为前缀,避免插入特殊字符时无法识别
        9.INSERT INTO 表名(列名) VALUES(DEFAULT)
            VALUES 后的值可以为 DEFAULT 值,即默认值
        10.INSERT INTO Student(Name) VALUES(‘张‘‘三‘)
            插入的数据中有单引号的时候,需要输入两个单引号表示一个单引号(转义字符)

·删除数据
    DELETE FROM Student    --删除表中的所有数据
    TRUNCATA TABLE Studeng  --重置表 (包括重置标识)
        ·以上两者效率有很大差别,如果用 DELETE 会产生很多的日志,而使用 TRUNCATE 只会产生一行日志。
    DROP TABLE Student   --直接从数据库中删除该表(慎用)

·修改语句
    UPDATE 表名 SET 列名1=数据1,列名2=数据2··· WHERE 列名1=数据1( AND 列名2=数据2 AND 列名3=数据3 ···)( OR 列名2=数据2 ···)( AND 列名2=数据2 OR 列名3=数据3)
        UPDATE Student SET age=age+1
        UPDATE Student SET age+=1
        update Student set Phone=‘10010‘ where name=‘王五‘ and Gender=1 or name=‘王五6‘
        UPDATE Student SET Address=‘未知‘ WHERE Address IS NULL
        WHERE Address IS NOT NULL
        WHERE Address=‘ ‘
        WHERE Address

    注意:
        1. AND 优先于 OR 执行
        2. SET 的时候可以取出原来的值
        3. WHERE 中可以使用的其他逻辑运算符:(||)OR 、 (&&)AND 、 (!)NOT 、 < 、 > 、 >= 、 <= 、 <>(同!=)(不等)等 

约束:
    非空约束:数据不能为空
    主键约束:唯一且不能为空
    唯一约束:数据唯一,允许为空,但只能出现一次
    默认约束:如果不给值,则为默认值
    检查约束:范围以及各式限制。在设计界面的列名上右键-CHECK约束
    外键约束:添加主外键关系,外键的值必须来自主键表

·查询语句
    select 列名1( as 重命名),列名2( as 重命名)··· from 表名 where 条件
    select 列名1( as ‘重命名‘),列名2( as ‘重命名‘)··· from 表名 where 条件
    select 列名1( 重命名),列名2( 重命名)··· from 表名 where 条件

    select 1+1  --计算表达式值
    SELECT GETDATE()  --方便快捷的取到服务器系统的时间

    -TOP
        --在查询出的整个结果集中取前一部分数据
        select top 10 * from Student  --取出Student表中前10条的所有数据
        select top 10 Name,Gender,Age from Student  --取出Student表中前10条的部分数据
        select top 10 percent * from Student  --从Student表中取出前10%的数据,所有计算的结果是进位的,如 21/10=2.1=>3

    -ORDER BY   (效率较低,能不使用就不使用)
        --将当前查询出来的数据结果进行排序,排序方式按照后面指定的列排序
        --order by 列名 desc  : 按照降序排序数据
        --order by 列名 asc   : 按照升序排序数据
        select top 10 * from Student order by id desc

    -DISTINCT
        --针对查询之后的结果去除重复行。两行数据中只要有一个数据不同就不认为是重复行。
        select distinct Name,Gender,Age from Student  --将查询出的整个结果集进行重复处理。

·聚合函数

MAX(列名) –返回一行数据

MIN(列名) –返回一行数据

AVG(列名) –返回一行数据

SUM(列名) –返回一行数据

COUNT(列名) –返回筛选成功的数据量。建议使用 COUNT(ID)

注:1.聚合函数对NULL值不计算。如果一行的值都是NULL,COUNT(*) 包含对空值行、重复行的统计。
    2.对于查询表中的所有数据,【select 分别列出所有的列名 from 表名】要比【select * from Student】 运行效率高。

例:select max(age) from Student  --取出表中的最大年龄
    select min(age),max(age),avg(age),sum(age) from Student  --计算出各种值
    select count(*) from Student where age=10  --计算符合要求的行的数据量

·排序规则

-先后顺序为 数字、字母、汉子(拼音)

·WHERE

- < > <= >= <> != 等判断符号

- BETWEEN...AND... (该函数经过优化,在大数据中使用时,明显查询效率)
    -例如 BETWEEN 20 AND 30 其显示的结果中包含20与30
    -SELECT * FROM STUDENT WHERE AGE BETWEEN 20 AND 30

- IN (数据1,2...) (查询表中列中的值为括号中的值的数据)
    -SELECT * FROM STUDENT WHERE CID IN (1,2) 同 SELECT * FROM STUDENT WHERE CID=1 OR CID=2
    -SELECT * FROM dbo.Student WHERE Gender IN (‘男‘,‘女‘)

注:1.BETWEEN and 在数据库内部是做过特殊优化的,执行效率比> and < 等这种方式快

·模糊查询

-使用系统已经定义好的匹配符,按照定义的规则筛选数据

-匹配符: _ % [] ^

_ 代表一个任意字符

% 代表零个或多个任意字符

[] 代表一个字符的取值区间

-不区分大小写

^ 配合[]使用,表示不属于该区间

-该匹配符数据库不兼容,SQL SERVER可以使用,其他数据库要使用 NOT LIKE

注:1.使用匹配符筛选数据效率很低
    2.当要转义匹配符时一般使用 [] 进行转义,而‘^‘不用,因为当‘^‘在[]外时就代表一个普通的‘^‘符号

-例如:SELECT * FROM STUDENT WHERE NAME LIKE ‘%王%‘ --从表中筛选出名字中有‘王‘字的人
       SELECT * FROM STUDENT WHERE NAME LIKE ‘王%‘  --从表中筛选出姓‘王‘的人
       SELECT * FROM STUDENT WHERE NAME LIKE ‘_A%‘  --从表中筛选出名字第二个字是‘A‘的人
       SELECT * FROM STUDENT WHERE NAME LIKE ‘%[A-Z]%]  --从表中筛选出名字中有字母的人
       SELECT * FROM STUDENT SHERE NAME LIKE ‘%[0-9]%‘  --查询表中名字中有数字的人
       SELECT * FROM STUDENT WHERE NAME LIKE ‘%[0-9(,)A-Z]%‘  --
       SELECT * FROM STUDENT WHERE NAME LIKE ‘%[^0-9A-Z]%‘  --查询名字中没有数字和字母的人
       SELECT * FROM STUDENT WHERE NAME NOT LIKE ‘%[0-9A-Z]%‘  --同上,查询名字中没有数字和字母的人
       特殊:
           SELECT * FROM STUDENT WHERE NAME LIKE ‘%[%]%‘  --查询名字中有一个‘%‘的人
           SELECT * FROM STUDENT WHERE NAME LIKE ‘%[_]%‘  --查询名字中有一个‘_‘的人
           SELECT * FROM STUDENT WHERE NAME LIKE ‘%[‘‘]%‘  --查询名字中有一个 单引号 的人
           SELECT * FROM STUDENT WHERE NAME LIKE ‘%[‘‘]%‘  --同上
           SELECT * FROM STUDENT WHERE NAME LIKE ‘%^%‘  --匹配出名字中有一个‘^‘的人

·空值判断

-SELECT * FROM STUDENT WHERE ADRESS IS NULL

-SELECT * FROM STUDENT WHERE ADRESS IS NOT NULL

·ISNULL() 函数

-如:SELECT NAME,ISNULL(AGE,符合AGE类型的其他值) FROM STUDENT WHERE … –当查询的结果中,AGE的值为’NULL’,则显示为要替换的值

·类型转换

-CAST(AGE AS NVARCHAR(10)) –将原本为INT类型的AGE转换成NVARCHAR(10)类型

-CONVERT(INT,’123’) –将字符串’123’转换成INT类型

-

·GROUP BY

CAST(EXPRESSION AS DATA_TYPE)

CONVERT(DATA_TYPE,EXPRESSION,[STYLE])

-根据某一列数据进行分组,返回的数据表格中一行代表一组,通常配合聚合函数使用。

-例如:SELECT GENDER,MAX(AGE),MIN(AGE),SUM(AGE) FROM STUDENT GROUP BY GENDER

SELECT * FROM STUDENT GROUP BY GENDER

-注:1.分组后只能获得作为分组依据的原表数据,其他数据需通过聚合函数获得

-HAVING
    -其作用是对分组后的信息进行过滤。可用的参数为GROUP BY子句中的参数和聚合函数
    -例如:SELECT AGE,COUNT(ID) FROM STUDENT GROUP BY AGE HAVING AGE>25
           SELECT AGE,COUNT(ID) FROM STUDENT GROUP BY AGE HAVING COUNT(ID)>1

·SQL语句的执行顺序

1.SELECT -> DISTINCT -> TOP

2.FROM 表

3.WHERE 条件 –形成结果集

4.GROUP BY 列

5.HAVING 筛选条件

6.ORDER BY 列

`UNION 联合查询

-1.两个结果集必须具有相同的列数

2.列具有相同的数据类型(至少能隐式转换)

3.最终输出的集合的列名由第一个结果集的列名确定

-SELECT * FROM STUDENT WHERE AGE>25
 UNION
 SELECT * FROM STUDENT WHERE AGE<30
 UNITON
 ...
 (可进行多结果集联合,但结果中不会出现重复数据)

 -SELECT * FROM STUDENT WHERE AGE>25
 UNION ALL
 SELECT * FROM STUDENT WHERE AGE<30
 UNITON ALL
 ...
 (可进行多结果集联合,结果中可能包含重复数据)

·批量插入 = 插入语句 + 结果集

-将结果集当成值插入数据库,结果集的列数量、类型都要一样

INSERT INTO STUDENT(STUNO,ENGLISH,MATH)

SELECT 1,80,100 UNION

SELECT 1,80,100 UNION

SELECT 3,50,59 UNION ALL

SELECT 4,66,89 UNION

SELECT 5,59,100

 -可以复制一张表,但是没有主键
    Select * into Score2 from Score where 1<>1

·字符串函数

-LEN(STRING) 计算字符串中的字符个数

-DATALENGTH(STRING) 计算字符串的字节长度

-LOWER(STRING) 将字符串转换成小写

-UPPER(STRING) 将字符串转换成大写

-LTRIM(STRING) 去除字符串左侧的空白字符

-RTRIM(STRING) 去除字符串右侧的空白字符

-LEFT(STRING,LENGTH) 取得字符串从左侧开始取的LENGTH长度的字符串

-RIGHT(STRING,LENGTH) 取得字符串从右侧开始取的LENGTH长度的字符串

-SUBSTRING(STRING,START_NUM,LENGTH) 从字符串中第START_NUM个字符开始取LENGTH个字符

·日期函数

-GETDATE() 取得当前日期

-DATEADD(PART_NAME,NUM,DATE) 在DATE的基础上增加NUM的时间

例如:SELECT DATEADD(YEAR,2,GETDATE())

SELECT DATEADD(MONTH,2,GETDATE())

SELECT DATEADD(DAY,2,GETDATE())

SELECT DATEADD(HOUR,2,GETDATE())

-DATEDIFF(DATE_NAME,START_DATE,END_DATE) 取得以DATE_NAME为时间单位的两个时间的差

例如:SELECT DATEDIFF(MINUTE,GETDATE(),DATEADD(YEAR,2,GATDATE()))

-DATEPART(DATE) 取得一个日期的特定部分

例如:SELECT DATEPART(YEAR,GETDATE())

SELECT DATEPART(MONTH,GETDATE())

SELECT DATEPART(HOUR,GETDATE())

-YEAR(DATE) 取得时间的年

-MONTH(DATE) 取得时间的月

-DAY(DATE) 取得时间的日

·取绝对值 ABS(数值)

【高级运用】

-INSERT

1.在 INSERT 语句的 VALUES 前加上 OUTPUT INSERTED.列名 ,这样就能取得新增数据的列名值,和普通的 INSERT 语句相比,当使用 OUTPUT 时将返回列名值,与 @@IDENTITY 类似。

-DELETE

1. DELETED.列名 ,在 WHERE 前使用,效果同 INSERTED.列名 。(若删除多行,则返回多个值)

为已存在的表的列添加默认值约束

ALTER TABLE [表名] ADD CONSTRAINT [约束名] DEFAULT([默认值]) FOR [列名]

时间: 2024-11-07 15:37:13

【个人笔记】SQL操作基础的相关文章

【知了堂学习笔记】SQL查询基础语句(单表查询、多表查询)

SQL查询基础 1.单表查询 从数据库中查找数据 专业的称谓又称为投影 基本查询语句结构 select 列 from 表 * 所有列不是所有其他东西 查询所有数据 例:SELECT * FROM t_studen 需要执行比较细的操作  加上条件筛选:查询id为2号的学生信息 SELECT * FROM t_student WHERE id=2; 筛选的执行步骤 例:SELECT * FROM t_student WHERE id=2; SELECT *          (3) 再查询  筛选

SQL server基础知识(表操作、数据约束、多表链接查询)

SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database 数据库名称 查询:select name from master..sysdatabases 修改:alter database 数据库名称(在 sql server 中修改与数据库关联的文件和文件组.在数据库中添加或删除文件和文件组.更改数据库或其文件和文件组的属性) (3).管理表 选择数据库:use 数

SQL语言基础和数据库操作

Sql语言基础: 核心思想:我们自己构造一段查询的代码,然后添加到语句后,从而得到想要的某些数据. Mysql是一种开源数据库 APP Serv:Apache+php+mysql,相当于phpstudy(建议装在本机上,不建议装在虚拟机) 安装(主要):4个主件都要安装,本地网址需要自己命名,例如:www.test.com 然后设置Mysql密码,选择允许通过防火墙. 默认启动Apache和mysql Mysql操作: 打开mysql.exe和mysqld.exe所在的文件夹,复制路径地址; 登

MySQL学习笔记—SQL服务器模式汇总

MySQL学习笔记-SQL服务器模式汇总 MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式.这样每个应用程序可以根据自己的需求来定制服务器的操作模式. 模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查.这样可以更容易地在不同的环境中使用MySQL,并结合其它数据库服务器使用MySQL. 你可以用–sql-mode="modes"选项启动mysqld来设置默认SQL模式.如果你想要重设,该值还可以为空(–sql-mode ="&q

[terry笔记]data guard基础知识

如下介绍了data guard的基础知识,整理自网络: Data Gurad 通过冗余数据来提供数据保护,Data Gurad 通过日志同步机制保证冗余数据和主数据之前的同步,这种同步可以是实时,延时,同步,异步多种形式.Data Gurad 常用于异地容灾和小企业的高可用性方案,虽然可以在Standby 机器上执行只读查询,从而分散Primary 苏菊哭的性能压力,但是Data Gurad 决不是性能解决方案. 在Data Gurad 环境中,至少有两个数据库,一个处于Open 状态对外提供服

SQL数据库基础知识-巩固篇&lt;一&gt;

SQL数据库基础知识-巩固篇<一>... 首先展示两款我个人很喜欢的数据库-专用于平时个人SQL技术的练习<特点:体积小,好安装和好卸载,功能完全够用了> MySQL-57 DataBase MS-SQLServer-2000 DataBase SQL的含义:结构化查询语言(Structured Query Language)简称SQL 作用:SQL(Structured Query Language,结构化查询语言)是一种用于操作数据库的语言. 结构化查询语言包含6个部分:一:数

SQL 查询基础(2)-实例

上次说到SQL查询语句的逻辑执行过程,现在来用一个实例说明一下逻辑执行的过程. 前提:我们有三个表,分别记住客户信息.订单信息和产品信息 客户信息表:Customer ID,Name,Adress,PhoneNumber ID Name Adress PhoneNumber 1 CompanyA No.1 Street 123456 2 CompanyB No.2 Street 23453 3 CompanyC No.3 Street 45321 4 CompanyD No.4 Street 4

精妙SQL语句 基础

精妙SQL语句SQL语句先前写的时候,很容易把一些特殊的用法忘记,我特此整理了一下SQL语句操作,方便自己写SQL时方便一点,想贴上来,一起看看,同时希望大家能共同多多提意见,也给我留一些更好的佳句,整理一份<精妙SQL速查手册>,不吝赐教! 一.基础1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname 3.说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC s

加壳学习笔记(二)-汇编基础

7.简单的汇编语法:   堆栈平衡  PUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数 POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPAADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,