SQL(Structured Query Language)即结构化查询语言,是一种特殊目的的编程语言,也是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。以下是一些常用的SQL语句:
一、DDL(Data Definition Language)数据定义语言
DDL语句主要用于定义和管理数据库结构或模式。
-
创建数据库:
sqlCREATE DATABASE dbname;
或者,在创建数据库之前判断该数据库是否存在,如果存在则删除后再创建:
sqlIF EXISTS (SELECT * FROM sysdatabases WHERE name='dbname') DROP DATABASE dbname; CREATE DATABASE dbname;
-
删除数据库:
sqlDROP DATABASE dbname;
-
创建表:
sqlCREATE TABLE tablename ( column1 datatype [constraint], column2 datatype [constraint], ... );
-
删除表:
sqlDROP TABLE tablename;
-
修改表结构:
-
添加列:
sqlALTER TABLE tablename ADD column_name column_type [default 默认值];
-
删除列:
sqlALTER TABLE tablename DROP COLUMN column_name;
-
修改列数据类型或约束(需要先删除原列再添加新列,或直接使用特定数据库的ALTER COLUMN语法):
sqlALTER TABLE tablename ALTER COLUMN column_name new_datatype;
-
添加主键:
sqlALTER TABLE tablename ADD PRIMARY KEY (column_name);
-
删除主键:
sqlALTER TABLE tablename DROP PRIMARY KEY;
-
-
创建索引:
sqlCREATE [UNIQUE] INDEX idxname ON tablename (column_name [...]);
-
删除索引:
sqlDROP INDEX idxname ON tablename;
-
创建视图:
sqlCREATE VIEW viewname AS SELECT statement;
-
删除视图:
sqlDROP VIEW viewname;
二、DML(Data Manipulation Language)数据操作语言
DML语句用于对数据库中的数据进行增删改查操作。
-
插入数据:
sqlINSERT INTO tablename (column1, column2, ...) VALUES (value1, value2, ...);
或者,插入所有列的数据(列名和值需一一对应):
sqlINSERT INTO tablename VALUES (value1, value2, ...);
-
更新数据:
sqlUPDATE tablename SET column1 = value1, column2 = value2, ... WHERE condition;
-
删除数据:
sqlDELETE FROM tablename WHERE condition;
或者,删除表中的所有数据(但保留表结构):
sqlDELETE FROM tablename;
更高效的删除所有数据的方法是使用TRUNCATE TABLE语句,它会重置表并删除所有数据,但比DELETE更快,因为它不使用WHERE子句:
sqlTRUNCATE TABLE tablename;
三、DQL(Data Query Language)数据查询语言
DQL语句用于从数据库中检索数据。
-
基础查询:
sqlSELECT column1, column2, ... FROM tablename WHERE condition ORDER BY column_name [ASC|DESC];
-
聚合函数:用于对一组值执行计算并返回单个值。
- COUNT():计算行数。
- SUM():计算总和。
- AVG():计算平均值。
- MAX():查找最大值。
- MIN():查找最小值。
sqlSELECT COUNT(*), SUM(column_name), AVG(column_name), MAX(column_name), MIN(column_name) FROM tablename WHERE condition;
-
分组查询:使用GROUP BY子句将结果集按一个或多个列进行分组。
sqlSELECT column1, COUNT(*) FROM tablename GROUP BY column1 HAVING COUNT(*) > value;
-
分页查询:使用LIMIT子句(MySQL)或FETCH/OFFSET子句(SQL Server等)来限制返回的记录数。
MySQL中的分页查询:
sqlSELECT * FROM tablename LIMIT offset, row_count;
SQL Server中的分页查询:
sqlSELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY column_name) AS row_num, * FROM tablename ) AS temp_table WHERE row_num BETWEEN start_row AND end_row;
或者使用OFFSET FETCH子句:
sqlSELECT * FROM tablename ORDER BY column_name OFFSET offset_row_count ROWS FETCH NEXT fetch_row_count ROWS ONLY;
-
模糊查询:使用LIKE操作符和通配符(%和_)来搜索列中的特定模式。
sqlSELECT * FROM tablename WHERE column_name LIKE 'pattern%';
-
内连接:返回两个表中满足连接条件的记录。
sqlSELECT a.*, b.* FROM table1 a INNER JOIN table2 b ON a.common_field = b.common_field;
-
外连接:返回左表(左外连接)或右表(右外连接)中的所有记录,以及满足连接条件的记录。
-
左外连接:
sqlSELECT a.*, b.* FROM table1 a LEFT JOIN table2 b ON a.common_field = b.common_field;
-
右外连接:
sqlSELECT a.*, b.* FROM table1 a RIGHT JOIN table2 b ON a.common_field = b.common_field;
-
-
子查询:在查询中嵌套另一个查询。
sqlSELECT * FROM tablename WHERE column_name = (SELECT column_name FROM another_table WHERE condition);
以上内容涵盖了SQL中最常用的一些语句和操作。需要注意的是,不同的数据库管理系统(如MySQL、SQL Server、Oracle等)可能在某些语法和函数上存在差异。因此,在实际使用中,建议参考所使用数据库的官方文档或相关资料。