`

sql基础(适用于mysql)

 
阅读更多
创建数据库
CREATE DATABASE 数据库名;

删除数据库
DROP DATABASE 数据库名;

mysql关闭/打开安全模式
SET SQL_SAFE_UPDATES = 0;
SET SQL_SAFE_UPDATES = 1;

创建表
CREATE TABLE T_Person (FName VARCHAR(20),FAge INT,FRemark VARCHAR(20),PRIMARY
KEY (FName));

CREATE TABLE T_Debt (FNumber VARCHAR(20),FAmount DECIMAL(10,2) NOT NULL,
FPerson VARCHAR(20),PRIMARY KEY (FNumber),
FOREIGN KEY (FPerson) REFERENCES T_Person(FName)) ;

删除表中数据
TRUNCATE TABLE 表名;
DELETE FROM 表名;

删除表
DROP TABLE 表名

简单的增删改
INSERT INTO tablename(字段名) VALUES(字段值);
字段顺序任意,字段数量任意(非空约束字段必须插入)
INSERT INTO T_Person(FName,FAge,FRemark) VALUES('Tom',18,'USA');

UPDATE tablename SET 字段名=值
UPDATE tablename SET 字段名=值 WHERE ...
UPDATE T_Person SET FAge = 12 WHERE FNAME='Tom';

DELETE FROM 表名 WHERE ...
DELETE FROM T_Person WHERE FAge > 20 or FRemark = 'Mars';

查询语句
SELECT * FROM 表名;
SELECT 字段名 FROM 表名;
SELECT * FROM 表名 WHERE ...;

别名机制
SELECT 字段名 as 别名 FROM 表名;
SELECT 别名.字段名 FROM 表名 as 别名;

max,min,avg,sum函数

count函数
SELECT COUNT(*),COUNT(FNumber),COUNT(FName) FROM T_Employee
#COUNT(*)统计的是结果集的总条数,而COUNT(字段)统计的则是除了结果集中字段不为空值(也就是不等于NULL)的记录的总条数。

排序功能(ASC生序-默认,DESC降序)
SELECT * from t_employee order by FAge desc,FSalary desc;
#ORDER BY 子句位于SELECT 语句的末尾

LIKE以及通配符
SELECT * FROM T_Employee WHERE FName LIKE '_erry';
#'_'单字符匹配,'%'多字符匹配

NOT非
SELECT * FROM T_Employee WHERE NOT(FName LIKE 'S%') AND NOT(FName LIKE 'J%');

sql判断NULL,NOT NULL
select * from T_Employee where FName is null;

select * from T_Employee where FName is not null;

IN子句
SELECT FAge,FNumber,FName FROM T_Employee WHERE FAge IN (23,25,28);

BETWEEN(mysql默认包含边界)
SELECT * FROM T_Employee WHERE FAGE BETWEEN 23 AND 27
#等价于>=23 and <=27

GROUP BY分组功能
SELECT FAge FROM T_Employee GROUP BY FAge;
#GROUP BY必须在select语句的后面

SELECT FAge,sum(FSalary) FROM T_Employee GROUP BY FAge;

#GROUP BY子句中可以指定多个列,只需要将多个列的列名用逗号隔开即可。指定多个分组规则以后,
#数据库系统将按照定义的分组顺序来对数据进行逐层分组,首先按照第一个分组列进行分组,
#然后在每个小组内按照第二个分组列进行再次分组……逐层分组,从而实现“组中组”的效果,而查询的结果集是以最末一级分组来进行输出的。
SELECT FSubCompany,FDepartment FROM T_Employee GROUP BY FSubCompany,FDepartment;

HAVING
#只检索人数多余1个的年龄段
SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge HAVING COUNT(*)>1

需要特别注意,在HAVING语句中不能包含未分组的列名,比如下面的SQL语句是错误的:
SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge HAVING FName IS NOT NULL
执行的时候数据库系统会提示类似如下的错误信息:
HAVING 子句中的列'T_Employee.FName' 无效,因为该列没有包含在聚合函数或GROUP BY 子句中。
需要用WHERE语句来代替HAVING,修改后的SQL语句如下:
SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee WHERE FName IS NOT NULL GROUP BY FAge

LIMIT
MYSQL中提供了LIMIT关键字用来限制返回的结果集,LIMIT放在SELECT语句的最后位置,
语法为“LIMIT 首行行号,要返回的结果集的最大数目”。比如下面的SQL语句将返回按照工
资降序排列的从第二行开始(行号从0开始)的最多五条记录:
SELECT * FROM T_Employee ORDER BY FSalary DESC LIMIT 2,5;

DISTINCT
SELECT DISTINCT FDepartment FROM T_Employee;
SELECT FDepartment FROM T_Employee;
#DISTINCT是对整个结果集进行数据重复抑制的,而不是针对每一个列,执行下面的SQL语句:
SELECT DISTINCT FDepartment,FSubCompany FROM T_Employee;

索引
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。上述SQL语句,在没有索引的情况下,数据库会遍历全部200条数据后选择符合条件的;而有了相应的索引之后,数据库会直接在索引中查找符合条件的选项。
虽然索引可以提高数据查询的速度,但是任何事物都是双刃剑,它也有一些缺点:索引占据一定磁盘空间,索引减慢了数据插入和删除的速度。因为每次插入和删除的时候都需要更新索引,一个表拥有的索引越多,则写操作的平均性能下降就越大。
CREATE INDEX 索引名 表名(字段1,字段2,...)
DROP INDEX 索引名ON 表名;

约束(:非空约束;唯一约束; CHECK 约束;主键约束;外键约束)
非空约束:
NOT NULL

唯一约束:
定义复合唯一约束需要定义在所有字段列表之后,语法如下:
CONSTRAINT 约束名 UNIQUE(字段1,字段2……字段n)
这里的“字段1,字段2……字段n”为组成约束的多个字段,如果只有一个字段则可以看做是单字段唯一约束定义的另外一种形式。通过这种形式定义的唯一约束由于有一个确定的名称,所以可以很容易的通过这个名字来删除这个约束。
为已经存在的表添加/删除唯一约束
ALTER TABLE 表名ADD CONSTRAINT 唯一约束名UNIQUE(字段1,字段2……字段n);
ALTER TABLE 表名DROP CONSTRAINT 唯一约束名
不过上边的语法不能在MYSQL中执行,MYSQL中删除约束的语法为:
ALTER TABLE 表名DROP INDEX 唯一约束名

check约束:
直接在列定义中添加CHECK约束,可以使用常量表达式,还可以使用函数。但是缺点是约束条件不能引用其他列。
要想使用其它列,需要使用
CONSTRAINT 约束名 CHECK(...)
给已经建好的表添加/删除check约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(...);
ALTER TABLE 表名DROP CONSTRAINT 约束名
不过上边的语法不能在MYSQL中执行,MYSQL中删除约束的语法为:
ALTER TABLE 表名DROP INDEX 约束名

主键约束:
直接在建表时创建
数据类型 字段名 PRIMARY KEY,或者,
CONSTRAINT 主键名 PRIMARY KEY(字段1,字段2,...)
给已经建好的表添加/删除主键
ALERT TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY(字段1,字段2,...)
ALERT TABLE 表名 DROP CONSTRAINT 主键名
不过在mysql中需要写成
ALERT TABLE 表名 DROP PRIMARY KEY

外键约束:
直接在建表时创建
CONSTRAINT 外键名 POREIGN KEY(字段名) REFERENCES 关联表名(关联字段)
给已经建好的表添加/删除外键
ALERT TABLE 表名 ADD CONSTRAINT 外建名 POREIGN KEY(字段名) REFERENCES 关联表名(关联字段)
ALERT TABLE 表名 DROP CONSTRAINT 外键名
不过在mysql中需要写成
ALERT TABLE 表名 DROP FIREIGN KEY 外建名

表连接
inner join
select order from A INNER JOIN B ON A.name = ‘TOM’
查询出A表和B表中所有的名字为TOM的订单
inner join是基于两张表的关联关系来连接表,只显示两张表的并集

cross join
与inner join比起来,cross join非常简单,因为它不存在ON子句。交叉连接会将涉及到的
所有表中的所有记录都包含在结果集中

outer join
left outer join
在左外部连接中,左表中所有的记录都会被放到结果集中,无论是否在右表中存在匹配
记录。

right outer join
与左外部连接正好相反,在右外部连接中不管是否成功匹配连接条件都会返回右表中的
所有记录。

full outer join
全外部连接是左外部连
接和右外部连接的合集,因为即使在右表中不存在匹配连接条件的数据,左表中的所有记录
也将被放到结果集中,同样即使在左表中不存在匹配连接条件的数据,右表中的所有记录也
将被放到结果集中。
在mysql中不支持full outer join,需要使用UNION取左连接和右连接的合集。

UNION
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SQL UNION 语法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

UNION ALL
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

自连接
到目前为止,我们讲解的连接都是在不同的数据表之间进行的,其实参与连接的表完全
可以是同一样表,也就是表与其自身相连接,这样连接就被称为自连接。自连接并不是独立
于交叉连接、内连接、外连接等这些连接方式之外的另外一种连接方式,而只是这些连接方
式的一种特例,也就是交叉连接、内连接、外连接等连接方式中只要参与连接的表是同一张
表,那么它们就可以被称为自连接。

子查询
SELECT语句可以嵌套在其他语句中,比如SELECT,INSERT,UPDATE以及DELETE等,这些被嵌套的SELECT语句就称为子查询,可以这么说当一个查询依赖于另外一个查询结果时就可以使用子查询。子查询有两种类型,一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数;另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的数据表。

单值子查询
单值子查询的语法和普通的SELECT 语句没有什么不同,唯一的限制就是子查询的返回值必须只有一行记录,而且只能有一个列。这样的子查询又被称为标量子查询。

列值子查询
与标量子查询不同,列值子查询可以返回一个多行多列的结果集。这样的子查询又被称为表子查询,表子查询可以看作一个临时的表,表子查询可以用在SELECT 语句的FROM子句中、INSERT语句、连接、IN 子句等很多场合。

SELECT列表中的标量子查询
标量子查询完全可以返回随当前查询记录而变化的值。
SELECT FId,FName,(SELECT MAX(FYearPublished) FROM T_Book WHERE T_Book. FCategoryId= T_Category.FId) FROM T_Category;
返回一类图书的最新出版年份

WHERE 子句中的标量子查询
select FReaderId from t_readerfavorite where FCategoryId = (select Fid from t_category where FName="Story");
喜欢“Story”的读者主键列表
分享到:
评论

相关推荐

    SQL Diagnostic Manager for MySQL 8.9 PDF.pdf

    用于MySQL的SQL Diagnostic Manager是用于...借助适用于MySQL的SQL Diagnostic Manager,您可以主动监视企业数据库环境并获得专家建议,以便即使MySQL的新手也可以加强安全性,优化性能并减少其MySQL系统的停机时间。

    mysql驱动(适用于mysql5.7版本)

    本压缩包包含了两个适用于MySQL 5.7版本的驱动文件:`mysql-connector-java-5.1.25.jar` 和 `mysql-connector-java-5.1.7-bin.jar`。 `mysql-connector-java` 是MySQL官方提供的Java驱动程序,它实现了JDBC接口,...

    mysql基础sql进阶语句

    新入门mysql的初学者的福音,内含基础mysql语句,基本适用于普通开发。

    java连接sqlserver,mysql

    - 类似于MySQL的方式,使用`Statement`或`PreparedStatement`执行SQL语句。 4. **关闭资源**: - 完成操作后关闭所有打开的资源。 #### 六、总结 本文介绍了如何使用Java通过直接连接和数据源连接MySQL及SQL ...

    SQLServer2000 ,2005,MySQL JDBC驱动包

    2. **MySQL-ODBC Bridge (Type 2)**:通过ODBC桥接器与MySQL通信,适用于需要使用ODBC的应用。 使用JDBC驱动连接数据库的基本步骤如下: 1. 导入相应的JDBC驱动包,例如对于SQL Server 2005,导入`...

    mysql jdbc连接驱动jar包(适用于mysql5.7版本,亲测可用)

    本驱动适用于MySQL 5.7版本,并且经过实际测试,确认可用。这个jar包是完全免费的,可以直接复制到IDE的lib目录下以便于项目引用。 首先,JDBC(Java Database Connectivity)是Java平台的标准API,由Sun ...

    mysql 安装 导出SQL

    - 访问MySQL官方网站(https://www.mysql.com/)或者通过第三方资源获取适用于您操作系统的MySQL安装包。 - 常见的操作系统有Windows、Linux和Mac OS,确保选择正确的版本进行下载。 2. **安装MySQL服务**: - ...

    mysql的sql优化

    首先,理解SQL执行原理是优化的基础。MySQL采用解析、优化、执行三个步骤来处理SQL语句。解析阶段会检查语法和权限;优化阶段会选择最佳的执行计划,包括决定表的读取顺序、是否使用索引等;执行阶段则是按照计划...

    mysql oracle SqlServer驱动

    此外,SQL Server ODBC驱动则适用于其他语言,如C++或Python,通过ODBC接口与SQL Server建立连接。 在实际开发中,选择合适的驱动通常取决于项目需求、编程语言、性能要求以及是否需要跨平台。驱动代码通常可以从...

    SQL和MySQL的JDBC合集

    8. **批处理**:JDBC提供了批处理功能,允许多个SQL语句一起发送到数据库,提高执行效率,适用于大量数据操作。 综上所述,"SQL和MySQL的JDBC合集"是一个实用的资源,包含了进行Java数据库开发所需的JDBC驱动和相关...

    sqlserver2000+mysql 驱动

    SQL Server 2000提供了强大的安全性、高可用性和可扩展性,适用于各种规模的企业应用。对于Java开发者而言,使用JDBC(Java Database Connectivity)驱动可以实现Java应用程序与SQL Server 2000的连接。JDBC驱动通常...

    oracle 到mysql转换工具

    这款工具通常适用于那些需要从Oracle数据库迁移到MySQL数据库的企业或个人,可以有效地降低迁移过程中的复杂性和工作量。 首先,我们来详细了解Oracle数据库。Oracle是全球领先的商业级关系型数据库管理系统,广泛...

    SqlServer,Mysql数据同步系统,适用于企业数据库做数据迁移。

    这个系统特别适用于那些需要跨平台管理数据或者需要在Sql Server和Mysql数据库之间保持数据一致性的企业。以下是对这个系统的关键知识点的详细解释: 1. **数据同步**:数据同步是该系统的主打功能,它可以实现在...

    php6与mysql5基础教程 及 源码 及 sql

    PHP是一种广泛使用的开源服务器端脚本语言,尤其适用于Web开发,而MySQL则是一种高效、可靠的开源关系型数据库管理系统,两者结合为开发者提供了强大的数据处理能力。 在本书中,读者将学习到: 1. **PHP基础**:...

    MySQL基础PDF版

    本篇主要介绍MySQL的基础知识,涵盖数据库概述、数据操作语言、数据类型以及数据操作。 1. **数据库概述** - **什么是数据库**:数据库(Database,简称DB)是长期存储在计算机内,有组织、可共享的大量数据集合,...

    bookstore(sql.mysql).zip

    - **SQL基础**:包括SELECT查询、INSERT插入、UPDATE更新、DELETE删除等基本操作,以及JOIN、WHERE、GROUP BY、HAVING等高级查询技巧。 3. **Java与MySQL的连接** - **JDBC驱动**:介绍MySQL的JDBC驱动类...

    全国省市区数据sql (mysql)三级联动

    综上所述,这个压缩包提供的全国省市区数据SQL(MySQL)是一个完整的数据模型,适用于构建具有三级联动功能的地理信息系统。通过合理设计和优化数据库结构,可以高效地处理和检索地理数据,为各种应用提供支持。

    SQL查询语言在MySQL平台中的基础性应用.pdf

    MySQL适用于大型、中型和小型的应用程序,具有高度的可靠性和良好的性能,是商业应用、小型项目甚至大型企业的首选数据库解决方案之一。 在MySQL平台上应用SQL查询语言时,主要执行数据的增、删、改、查(CRUD)等...

    mysql优化sql语句的优化(索引,常用小技巧.)

    - **全文索引**:用于全文搜索,适用于文章内容的搜索场景。 - **复合索引**:由多个列组成的索引,可以用于同时基于多个列的查询。 - **索引的创建与管理**: - 创建索引: ```sql CREATE INDEX index_name ...

    ojdbc14+sqljdbc4-2.0+mysql-connector-java-5.1.41

    总之,ojdbc14、sqljdbc4-2.0和mysql-connector-java-5.1.41是Java应用程序(如Kettle)与Oracle、SQL Server和MySQL数据库进行交互的基础,它们在数据集成、数据分析等场景中扮演着关键角色。在使用过程中,务必...

Global site tag (gtag.js) - Google Analytics