SQL必知必会

本文概述了数据库的基本概念,包括数据库、DBMS、表、模式、列和行,重点讲解了主键的定义及其重要性。同时,深入介绍了SQL语言,如数据检索、排序、过滤和使用别名的方法,适合初学者理解数据库操作核心技巧。
该文章已生成可运行项目,

数据库基础知识:

数据库:保存有组织的数据的容器。
数据库管理系统(DBMS):数据库软件,数据库是通过DBMS创建和操纵的容器。
表:某种特定数据类型的结构化清单。数据库中的每个表都有自己的名字,且唯一。不同的数据库可以使用相同的表名。
表的特性–模式:数据在表中如何存储,存储什么样的数据,数据如何分解。模式可以用来描述数据库中特定的表,也可以用来描述整个数据库(和其中表的关系)。
列:所有的表都是由一个或多个列组成,数据将被分解成多列进行存储,每个列都有相应的存储类型。
行:表中的数据按行存储,所保存的每个记录存储在自己的行内。
主键:表中每一行都应该有一列可以唯一表示自己。主键不是必要的,但是应该总是定义主键。使用方便。
作为主键的条件:
任意两合都不具有相同的主键值;
每一行都必须有一个主键值(主键值不允许设置为NULL)
主键列常定义在表的一列上,也可以使用多个列作为主键(应用到的所有列值的组合必须是唯一的,单个值可以重复但是组合值必须唯一)。
SQL:专门用来与数据库沟通的语言。是一种从数据库中读写数据的简单有效的方法。

检索数据

关键字:SELECT
结束语句(;):多条SQL以分号隔离,
未排序数据:如果没有明确排序查询结果,则返回数据没有特定的顺序。
SQl语句与大小写:SQL 不区分大小写,大部分开发人员喜欢对SQL关键字使用大写,表名,列名使用小写。其中所有换行都被忽略。可以写长行,也可以写短句。
检索单个列:

SELECT rowName FROM tableName;

检索多个列:

SELECT row1Name,row2Name FROM tableName;

检索所有列:

SELECT * FROM tableName;

检索不用的值:DINSINCT作用与所有列,不仅仅是跟在其后的那一行

SELECT DISTINCT rowName FROM tableName;

限制检索的结果:
SQLServer 和Access:TOP限制检索行数;

SELECT TOP 5 rowName FROM tableName;

DB2:FETCH FIRST ROWS ONLY

SELECT rowName FROM tableName FETCH FIRST 5 ROWS ONLY;

Oracle:ROWNUM

SELECT rowName FROM tableName WHERE ROWNUM<=5;

MySQL,MariaDb,PostgreSQl,SOLite:LIMIT

SELECT rowName FROM tableName LIMIT 5;#这是一条注释
SELECT rowName FROM tableName LIMIT 5 OFFSET 5;--从5行起的5行数据

排序:ORDER BY,必须是最后一条子句;
检索单列:

SELECT rowName FROM tableName ORDER BY rowName;

排序检索多列:

SELECT row1Name,row2Name,row3Name FROM tableName ORDER BY row1Name,row2Name;
--排序的顺序完全按规定进行,先按row1Name排序,如果row1Name一样则按照row2Name 排序
SELECT row1Name,row2Name,row3Name FROM tableName ORDER BY 1,2;
--按相对位置进行排序

指定排序的方向:

--降序排序:DESC
SELECT row1Name,row2Name,row3Name FROM tableName ORDER BY 1,2 DESC;
--升序排序:ASC,默认的
SELECT row1Name,row2Name,row3Name FROM tableName ORDER BY 1,2 ASC;

过滤数据

Where:

--匹配检测
SELECT row1Name,row2Name FROM tableName WHERE row3Name=10;
SELECT row1Name,row2Name FROM tableName WHERE row3Name='限定字符串';
--不匹配检查:Access支持<>不支持!=
SELECT row1Name,row2Name FROM tableName WHERE row3Name<>10;
SELECT row1Name,row2Name FROM tableName WHERE row3Name!=10;
--范围值检查
SELECT row1Name,row2Name FROM tableName WHERE row3Name BETWEEN 10 AND 30;
--空值检查:IS NULL;
 SELECT row1Name,row2Name FROM tableName WHERE row3Name IS NULL;

AND:

 SELECT row1Name,row2Name FROM tableName WHERE row3Name IS NULL AND row1Name='SWWd';

OR:

SELECT row1Name,row2Name FROM tableName WHERE row3Name IS NULL OR row1Name='SWWd';
 SELECT row1Name,row2Name FROM tableName WHERE row3Name='SQ' OR row3Name='sad' AND row1Name='SWWd' ;
 --默认优先计算xxANDyy,在计算OR
  SELECT row1Name,row2Name FROM tableName WHERE (row3Name='SQ' OR row3Name='sad' )AND row1Name='SWWd' ;
  --()最高级运算,可调整OR和AND的顺序

IN:

--in操作符用来在指定条件范围,范围中的每个条件都可以进行匹配,IN取一组由逗号分隔,括在括号中的合法值。
SELECT row1Name FROM tableName WHERE row1Name IN (1,3,2,54,32);

NOT:否定其后所跟的任何条件

SELECT row1Name,row2Name FROM tableName NOT WHERE row3Name='SQ' OR row3Name='sad';

LIKE:用通配符进行过滤

--%表示任何字符出现任意次数。
 SELECT row1Name,row2Name FROM tableName WHERE row3Name LIKE 'SQ%'#'%'不会匹配产品名称为NULL的行
 --_匹配单个字符
SELECT row1Name,row2Name FROM tableName WHERE row3Name LIKE 'SQ_'#DB2不支持通配符,Access使用?而不是_;
 --[]指定一个字符集,他必须匹配指定位置(通配符的位置)的一个字符。
 SELECT row1Name,row2Name FROM tableName WHERE row3Name LIKE 'SQ_[LSA]'

创建字符字段:

--Access,SQLServer
SELECT row1Name+'('+row2Name+')' FROM tableName WHERE row3Name='SAO'--DB2,Oracle,PostgreSQL,SQLite
SELECT row1Name||'('||row2Name||')' FROM tableName WHERE row3Name='SAO'--MySQL,MariaDB
SELECT Concat(row1Name,'(',row2Name,')') FROM tableName WHERE row3Name='SAO'

使用别名:

本文章已经生成可运行项目
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值