常见编程语言入门:sql

839 阅读2分钟

概述

sql(Structured Query Language)属于程序语言的第四代,第四代编程语言是为特定应用设计的语言,sql是用于处理关系型数据库的语言。

数据库具体见后续文章,本文只介绍用法,即各种增删改查。

基本用法

sql的工作主要以语句完成,sql语句大小写不敏感,一个语句主要包含两部分,what(做什么)、where(在哪里做),还有可选的how(怎么做)。

操作数据

  • insert into 增
  • delete 删
  • update 改
  • select 查

向表中插入新数据,可以指定列名

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

也可以默认列名,但要和表中列的顺序对应

INSERT INTO table_name
VALUES (value1,value2,value3,...);

用于删除表中的行,没有where时会删除所有行(或者叫记录)

DELETE FROM table_name
WHERE some_column=some_value;

用来更新数据的行,如果少了where会更新所有记录

UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;

作为一种query language,sql主要还是在于查功能,这里介绍一下基本用法,后面章节专门介绍查询

SELECT column_name,column_name
FROM table_name;

或查询全部列

SELECT * FROM table_name;

操作其他

增删改查分别使用create,drop,alter加上对应的操作对象

  • database 数据库
  • table 表
  • index 前两种的操作查询时,要用show+对应复数(比如 show tables),最后一种要指定所在table

查询进阶

select distinct

筛选出不同的值

SELECT DISTINCT column_name,column_name
FROM table_name;

order by

筛选的结果根据什么排序,默认升序asc

SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;

where

筛选出满足指定操作符结果的值

SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;

可用操作符包括

  • =
  • <> 不等于,具体的数据库一般实现了!=的写法
  • >
  • <
  • >=
  • <=
  • between 在某个范围 添加not取反
  • like 按照指定模式 添加not取反
  • in 属于多个可选值 添加not取反

多个条件之间之间用and表示都满足,or表示满足一个即可。

between

可以是数值、文本或日期,上下两个范围用and连接,包括两端

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

like

可以使用通配符指定模式

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;

通配符包括

  • % 表示0或多个字符
  • _ 表示一个字符
  • [charlist]其中任一字符
  • [^charlist] 或 [!charlist] 不在其中的任一字符

in

在枚举范围

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);

as

显示时的列名

SELECT column_name AS alias_name
FROM table_name;

join

基于两个或多个表的共同字段将其结合,然后在结合后的表中查找,用on指定共同字段

  • join或inner join 多个表都有的记录才会显示,即交集
  • left join 左表中有的记录就会显示,右边没有的显示null,
  • right join 右表中有的记录就会显示,左边没有的显示null
  • full join 并集
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

比如

SELECT Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id

union

两个选择语句的并集,选取的字段需要共同字段,默认不重复,如果重复使用union all

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

函数

对某个字段调用函数,可以进一步作为筛选条件,比如avg()表示平均数,获取某个字段的平均数

SELECT AVG(column_name) FROM table_name

作为条件,删选大于平均数的数据

SELECT site_id, count FROM access_log
WHERE count > (SELECT AVG(count) FROM access_log);

函数分为两种,Aggregate和Scalar,前者用于处理列数据返回一个值,后者用作普通函数处理每个字段,比如大小写转换

SELECT UCASE(column_name) FROM table_name;

Aggregate

  • avg() - 返回平均值
  • count() - 返回行数
  • first() - 返回第一个记录的值
  • last() - 返回最后一个记录的值
  • max() - 返回最大值
  • min() - 返回最小值
  • sum() - 返回总和

Scalar

  • ucase() - 将某个字段转换为大写
  • lcase() - 将某个字段转换为小写
  • mid() - 从某个文本字段提取字符,MySql 中使用
  • substring(字段,1,end) - 从某个文本字段提取字符
  • len() - 返回某个文本字段的长度
  • round() - 对某个数值字段进行指定小数位数的四舍五入
  • now() - 返回当前的系统日期和时间
  • format() - 格式化某个字段的显示方式

完结