SQL,指结构化查询语言,全称是 Structured Query Language;SQL 对大小写不敏感,SELECT 与 select 是相同的。分号是在数据库系统中分隔每条 SQL 语句的标准方法, SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号), 如果是数值字段,则不需要使用引号 。
一,表和数据库的创建和删除。
1.创建关键字:create;数据库和表的创建可以用DBMS手动创建,也可以SQL脚本创建,手动创建的表和数据库可以用DBMS输出为SQL脚本 ,创建完成后需要刷新数据库;
创建数据库:create database dbname;
创建表:create table table_name(column_name1 data_type(size), column_name2 data_type(size),column_name3 data_type(size)...);
column_name 参数规定表中列的名称,data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等),size 参数规定表中列的最大长度。
2.通过使用 DROP 语句,可以轻松地删除索引、表和数据库。drop语句会删除表中所有的记录和表结构,并释放存储空间,没有备份表之前要慎用。
删除数据库:drop database dbname;
删除表:drop table table_name; 可以直接用 drop table_name;
删除索引: drop index table_name.index_name;
3.use database_name; 命令用于选择数据库,在执行query查询语句时要选择所使用的数据库;
4.SQL 约束用于规定表中的数据规则。如果存在违反约束的数据行为,行为会被约束终止。约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。在 SQL 中,我们有如下约束:
NOT NULL ,在默认的情况下,表的列接受 NULL 值,NOT NULL 约束强制列不接受 NULL 值。如果不向字段添加值,就无法插入新记录或者更新记录。
UNIQUE - 保证某列的每行必须有唯一的值,UNIQUE 约束唯一标识数据库表中的每条记录,UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
PRIMARY KEY - 每个表都应该有一个主键,并且每个表只能有一个主键,主键必须包含唯一的值,主键列不能包含 NULL 值。PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。外键解释
CHECK - 保证列中的值符合指定的条件。如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。
DEFAULT - 规定没有给列赋值时的默认值,如果没有规定其他的值,那么会将默认值添加到所有的新记录。
利用约束创建表的示例:
create table person (p_id int not null primary key, lastname varchar(255) not null, firstname varchar(255),address varchar(255),city varchar(255) default 'Sandnes',check(P_id>0));
3.ALTER TABLE 语句用于在已有的表中添加、删除或修改列,对表的结构进行修改。
增加列,ALTER TABLE table_name ADD column_name datatype;
删除列,ALTER TABLE table_name DROP COLUMN column_name;
改变表中列的数据类型,ALTER TABLE table_name ALTER COLUMN column_name datatype;sql通用数据类型
二,query查询语句,实现数据的增删改查。
1.INSERT INTO 语句用于向表中插入新记录,可以有两种编写形式。
整条记录的插入,包含所有的列,无需指定列名 。
insert into table_name values(value1,value2,value3,...);
在记录中只指定某些列进行插入,未选定的列值为默认值,需要指定列名及被插入的值。
insert into table_name (column1,column2,column3,...) values(value1,value2,value3,...);
2.DELETE 语句用于删除表中的记录,但表的结构还存在,不会释放存储空间,需要的时候,数据可以回滚恢复。
删除所有的行,delete from table_name;或 delete * from table_name;
删除指定行,delete from table_name where some_column=some_value;(约束条件)
3.UPDATE 语句用于更新表中已存在的记录。
更新指定行的数据,update table_name set column1=value1,column2=value2,column3=value3,...where some_column=some_value;(约束条件)
4.SELECT 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。
4.1 基本数据选取操作
4.1.1 选取所有的行和所有的列,select * from table_name;
4.1.2选取指定行所有的列,select * from table_name where some_column=some_value;(约束条件)
4.1.3 选取所有行的部分的列的值,select column_name1,column_name2,...from table_name ;
4.1.4选取指定行的部分的列的值,select column_name1,column_name2,...from table_name where some_column=some_value;(约束条件)
4.3 对选取的数据进行处理
4.2.1 select distinct 语句用于返回唯一不同的值。在表中一个列可能会包含多个重复值,可以用distinct语句仅仅列出所有不同的值。distinct必须放在select语句开头,distinct语句中select显示的字段只能是distinct指定的字段,其他字段是不能出现的,但可以通过其他方法实现。
作用于单列,选取某一列中不同的值,select distinct column_name from table_name;
作用与多列,根据多列进行去重,即去掉多列都相同的重复的行,select distinct column_name,column_name... from table_name;
统计某一列去重后的数目,select count(distinct colunm_name) from table_name;
4.2.2 通过使用 as,可以为表名称或列名称指定别名,创建别名是为了让列名称或表名称的可读性更强。
给列指定别名,select column_name as alias_name,column_name as alias_name,...form table_name;
给表指定别名,select column_name ,column_name,...form table_name as alias_name;
示例:SELECT name AS n, country AS c FROM Websites;
4.2.3 order by关键字用于对结果集按照一个列或者多个列进行排序,默认按照升序对记录进行排序。也可以用asc(升序)或desc(降序)关键字来指定排序,order多列的时候,先按照第一个column name排序,在按照第二个column name排序。
语法格式,select column_name,column_name,...form table_name order by column_name,column_name asc | desc;
order by A,B (都是默认按升序排列);
order by A desc,B (A 降序,B 升序排列);
order by A ,B desc (A 升序,B 降序排列);即 desc 或者 asc 只对它紧跟着的第一个列名有效,其他不受影响,仍然是默认的升序。
4.2.4 select top 子句用于要返回前面指定数目的行记录,并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。
一般格式: select top number | percent column_name,column_name,...from table_name;
选取前3条记录, select top 3 * from table_name;
选取后3条记录, select top 3 * from table_name order by column_name desc;
选取前面一般记录,select 50 percent * from table_name;
4.2.5 WHERE 子句用于提取那些满足指定条件的记录。Where +条件(筛选行),可以在 WHERE 子句中使用比较运算符,逻辑运算符,和其他的判断条件。
比较运算符:=(等于),<>(不等于,在 SQL 的一些版本中,该操作符可被写成 !=),>(大于),<(小于),>=(大于或等于),<=(小于或等于)
逻辑运算符:and (与, 同时满足两个条件的值),or(或,满足其中一个条件的值),not(:非 满足不包含该条件的值);
特殊条件:is null(空值判断),between 左域 and 右域(在某个范围内),like(模糊查询,搜索某种模式),in(针对某个列的多个可能值);
where语句的一般格式:select column_name,column_name,...from table_name where column_name operator value ;
比较运算符示例: select column_name,column_name,...from table_name where some_column>=some_value;
逻辑运算符示例: select column_name,column_name,...from table_name where some_column>some_value and some_column>some_value;(可以对同一个属性或多个属性进行约束)
select column_name,column_name,...from table_name where not some_column>some_value ;(选取满足不包含该条件的行的指定列)
空值判断示例:select column_name,column_name,...from table_name where some_column is null;(选取条件列为空的指定列)
between and 用法示例:select column_name,column_name,...from table_name where some_column between value1 and value2;(指定范围内)
in 用法示例:select column_name,column_name,...from table_name where some_column in(value1,value2,value3...)(指定多个值内)
Like模糊查询示例:select column_name,column_name,...from table_name where some_column like '%M';(按通配符进行搜索)
通配符格式:% 替代一个或多个字符,_ 下划线仅替代一个字符,通配符与 SQL LIKE 操作符一起使用;
通配符示例:'%a' (以a结尾的数据),'a%' (以a开头的数据),'%a%' (含有a的数据),‘_a_’ (三位且中间字母是a的),
'_a' ( 两位且结尾字母是a的),'a_' ( 两位且开头字母是a的)。
4.4 多表查询和视图
4.5SQL函数