什么是 SQL?
SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。
- SQL 指结构化查询语言
- SQL 使我们有能力访问数据库
- SQL 是一种 ANSI 的标准计算机语言
SQL 能做什么?
- SQL 面向数据库执行查询
- SQL 可从数据库取回数据
- SQL 可在数据库中插入新的记录
- SQL 可更新数据库中的数据
- SQL 可从数据库删除记录
- SQL 可创建新数据库
- SQL 可在数据库中创建新表
- SQL 可在数据库中创建存储过程
- SQL 可在数据库中创建视图
- SQL 可以设置表、存储过程和视图的权限
SQL DML 和 DDL
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
SQL 中最重要的 DDL 语句:
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
sql常用语法
CREATE INDEX 语句用于在表中创建索引。
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
索引
您可以在表中创建索引,以便更加快速高效地查询数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
**注释:**更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
本例会创建一个简单的索引,名为 “PersonIndex”,在 Person 表的 LastName 列:
如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC:
CREATE INDEX PersonIndex
ON Person (LastName DESC)
假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PersonIndex
ON Person (LastName, FirstName)
ALTER TABLE 语句
ALTER TABLE 语句用于在已有的表中添加、修改或删除列。
如需在表(person)中添加列(history datatype是类型,比如date),请使用下列语法:
ALTER TABLE persons
ADD history datatype
要删除表中的列,请使用下列语法:
ALTER TABLE table_name
DROP COLUMN column_name
我们希望改变 “Persons” 表中 “Birthday” 列的数据类型。
ALTER TABLE Persons
ALTER COLUMN Birthday year
Microsoft Access 数据类型
在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。
Yes/No | 逻辑字段,可以显示为 Yes/No、True/False 或 On/Off。在代码中,使用常量 True 和 False (等价于 1 和 0)注释:Yes/No 字段中不允许 Null 值 |
---|---|
sql中char和varchar的区别:
CHAR(size) | 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。 |
---|---|
VARCHAR(size) | 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。注释:如果值的长度大于 255,则被转换为 TEXT 类型。 |
GROUP BY 语句
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
实例:
我们想要使用 GROUP BY 语句对学生按照“学生姓名”进行组合。
用sql语句查询出课程总分最高的学生姓名:
思路,
- 1,计算出各个学生的总分并排序好,
- 2,查询出最高分的学生
用sql语句查询出每门课程都小于70分的学生姓名(是每门课程都小于70分的学生,注意审题)
DISTINCT 关键字(去重)
个人理解为去除重复。用法:
SELECT DISTINCT 列名称 FROM 表名称
AVG 函数(平均值)
AVG 函数返回数值列的平均值。NULL 值不包括在计算中。
SELECT AVG(column_name) FROM table_name
Count()函数(返回列数)
函数返回指定列的值的数目(NULL不计入):
SELECT COUNT(column_name) FROM table_name
FIRST() 函数( 字段中第一个记录 )
FIRST() 函数返回指定的字段中第一个记录的值。
**提示:**可使用 ORDER BY 语句对记录进行排序。
SELECT FIRST(column_name) FROM table_name
LAST() 函数( 字段中最后一个记录 )
LAST() 函数返回指定的字段中最后一个记录的值。
**提示:**可使用 ORDER BY 语句对记录进行排序。
SELECT LAST(column_name) FROM table_name
MAX() 函数( 一列中的最大值 )
MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
SELECT MAX(column_name) FROM table_name
Min()函数( 一列中的最小值 )
Min函数返回一列中的最小值.空值不包括在计算中
SELECT MIN(column_name) FROM table_name
SUM() 函数( 数值列的总数 )
SUM 函数返回数值列的总数(总额)。
SELECT SUM(column_name) FROM table_name
HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
UCASE()函数( 把字段的值转换为大写 )
UCASE函数把字段的值转换为大写.
SELECT UCASE(column_name) FROM table_name
LCASE() 函数( 把字段的值转换为小写 )
LCASE 函数把字段的值转换为小写。
SELECT LCASE(column_name) FROM table_name
MID() 函数( 从文本字段中提取字符 )
MID 函数用于从文本字段中提取字符。
SELECT MID(column_name,start[,length]) FROM table_name
Len()函数( 返回文本字段中值的长度 )
Len函数返回文本字段中值的长度.
SELECT LEN(column_name) FROM table_name
ROUND() 函数( 把数值字段舍入为指定的小数位数 )
ROUND 函数用于把数值字段舍入为指定的小数位数。
SELECT ROUND(column_name,decimals) FROM table_name
NOW() 函数( 返回当前的日期和时间 )
NOW 函数返回当前的日期和时间。
提示:如果您在使用 Sql Server 数据库,请使用 getdate() 函数来获得当前的日期时间
SELECT NOW() FROM table_name
FORMAT() 函数( 对字段的显示进行格式化 )
FORMAT 函数用于对字段的显示进行格式化。
SELECT FORMAT(column_name,format) FROM table_name
每次执行都会出现类似报错
Sql报错:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggreg
解决办法
在Navicat工具里面执行下面语句:
show variables like “sql_model”;
set sql_mode=’’;
set sql_mode=‘no_engine_substitution,strict_trans_tables’;
然后再去操作数据库,就没任何问题了