SQL的基本使用
SQL是结构化查询语言,专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,操作数据库里面的数据。
- SQL是一门数据库编程语言
- 使用SQL语言编写出来的代码,叫做SQL语句
- SQL语句只能在关系型数据库中使用(例如Mysql、Oracle、SQL Server),非关系型数据库(如Mongodb)不支持SQL语言。
SELECT语句
语法格式
SELECT
语句用于从表中查询数据,执行的结果被存储在一个结果表中(成为结果集),语法格式如下:
-- 注释
-- 从from指定的表中,查询出所有的数据,* 表示所有列
select * from 表名称
-- 从from指定的表中,查询出指定的列名称(字段)的数据
select 列名称 from 表名称
注意:SQL语句中的关键词对大小写不敏感,select等于SELECT,FROM等效于from。
SELECT * 示例
我们希望从users表中选取所有的列,可以使用 符号 *
取代列的名称:
SELECT 列名称 示例
如需取名为 username
和 password
的列的内容(从名为users的数据库表),请使用下面的select语句:
INSERT INTO语句
语法格式
INSERT INTO
语句用于向数据表中插入新的数据行,语法格式如下:
-- 语法解读:向指定的表中,插入如下几列数据,列的值通过values一一指定
-- 注意:列和值要一一对应,多个列和多个值之间,使用英文的逗号分隔
insert into table_name(列1,列2,...) values (值1,值2,...)
INSERT INTO 示例
向users表中,插入一条 username
为tony stark,password
为 098123
的用户数据:
insert into users(username,password) value('tony stark','098123')
UPDATE语句
语法格式
update
语句用于修改表中的数据,语法格式如下:
update 表名称 set 列名称 = 新值 where 列名称 = 某值
- 用
update
指定要更新那个表中的数据 - 用
set
指定列对应的新值 - 用
where
指定更新的条件
UPDATE示例
更新某一行中的一个列
把users表中id为7的用户密码,更新为888888:
代码语言:javascript复制update users set password='888888' where id=4
更新某一行中的若干列
把users表中id为2的用户密码和状态,分别更新为admin123和1:
代码语言:javascript复制update users set password='admin123',status=1 where id=2
DELETE语句
语法格式
delete
语句用于删除表中的行,语法格式如下:
-- 从指定的表中,根据where条件,删除对应的数据行
delete from 表名称 where 列名称 = 值
DELETE示例
从users表中,删除id为4的用户:
代码语言:javascript复制delete from users where id=4
WHERE语句
where子句用于限定选择的标准,在select,update,delete语句中,,皆可使用where子句来限定选择的标准。
代码语言:javascript复制-- 查询语句中的where条件
select 列名称 from 表名称 where 列 运算符 值
-- 更新语句中的where条件
update 表名称 set 列=新值 where 列 运算符 值
-- 删除语句中的where条件
delete from 表名称 where 列 运算符 值
下面的运算符可在where子句中使用,用来限定选择的标准:
运算符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜素某种模式 |
注意:在某些版本的SQL中,操作符 <>
可以写为 !=
示例:
代码语言:javascript复制-- 查询status为1的所有用户
select * from users where status=1
-- 查询id大于2的所有用户
select * from users where id>2
-- 查询username不等于admin的所有用户
select * from users from username<>'admin'
AND和OR运算符
AND和OR可在where语句中把俩个或多个条件结合起来。
AND表示必须同时满足多个条件。相当于JavaScript中的 &&
运算符。
OR表示只要满足任意一个条件即可,相当于JavaScript中的 ||
运算符
示例
使用AND来显示所有status为0,并且id小于3的用户:
代码语言:javascript复制select * from users where status=0 and id<3
使用OR来显示所有status为1,或者username为zs的用户:
代码语言:javascript复制select * from users where status=1 or username='zs'
SQ的ORDER BY子句
ORDER BY语句用于根据指定的列队结果集进行排序
ORDER BY语句默认按照升序记录进行排序
如果希望按照降序队记录进行排序,可以使用DESC关键字
升序排序:对表中的数据,按照status字段进行升序排序:
代码语言:javascript复制select * from users order by status
降序排序:对users表中的数据,按照id字段进行降序排序:
代码语言:javascript复制select * from users order by id desc
多重排序:对users表中的数据,先按照status字段进行降序排序,再按照username的字母顺序,进行升序排序:
代码语言:javascript复制select * from users oreder status DESC,username ASC
COUNT(*)函数
COUNT(*)函数用于返回查询结果的总数据条款:
代码语言:javascript复制select count(*) from 表名称
查询users表中status为0的总数据条款:
代码语言:javascript复制select count(*) from users where status=0
使用AS为列设置别名
如果希望查询出来的列名称设置别名,可以使用AS关键字:
代码语言:javascript复制select count(*) as total from users where status=0
项目中操作MySql
安装操作MySQL数据库的第三方模块(mysql)
代码语言:javascript复制npm install mysql
通过mysql模块连接到MySQL数据库
代码语言:javascript复制//导入mysql模块
const mysql = require('mysql')
//建立与MySQL数据库的连接
const db = mysql.createPool({
host:'127.0.0.1', //数据库的IP地址
user:'root', //登录数据库的账户
password:'admin', //登录数据库的密码
database:'my_db_01' //指定要操作的数据库
})
通过MySQL模块执行SQL语句
调用db.query()函数,指定要执行的SQL语句,通过回调函数拿到执行结果
代码语言:javascript复制//检测mysql模块能否正常工作
db.query('select 1',(err,results)=>{
if(err) return console.log(err.message)
//只要能打印出[RowDataPacket{'1':1}]的结果,就证明数据库连接正常
console.log(results)
})
查询数据
查询users表中的数据
代码语言:javascript复制const sqlStr='select * from users'
db.query(sqlStr,(err,results)=>{
//判断查询失败
if(err) return console.log(err.message)
//查询成功
console.log(results)
})
插入数据
向users表中新增数据,其中username为Spider-Man,password为000123
代码语言:javascript复制//1.要插入到表中的数据对象
const user = {username:'Spider-Man',password:'000123'}
//2.待执行的SQL语句,其中的?表示占位符
const sqlStr = 'insert into (username,password) values(?,?)'
//3.使用数组的形式,依次为?占位符指定具体的值
db.query(sqlStr,[user.username,suer.password](err,results)=>{
if(err) return console.log(err.message)//成功
if(results.affectedRows === 1){
console.log('数据插入成功')//失败
}
})
插入数据的便捷方式:
向表中新增数据时,如果数据对象每个属性和数据表的字段一一对应,则可以通过如下方式快速插入数据:
代码语言:javascript复制//1.要插入到表中的数据对象
const user={username:'yuezeyi',password:'000'}
//2.待执行的SQL语句,其中英文的?表示占位符
const sqlStr='insert into users set ?'
//3.直接将数据对象当作占位符的值
db.query(sqlStr,user,(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows===1){
console.log('数据插入成功')
}
})
更新数据
代码语言:javascript复制//1.要更新的数据对象
const user ={ id:7, username:'aaa',password:'000'}
//2.待执行的SQL语句
const sqlStr='update users set username=?,password=? where id=?'
//调用db.query()执行SQL语句的同时,使用数组依次为占位符指定具体的值
db.query(sqlStr,[user.name,user.password,user.id],(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows===1){
console.log('更新数据成功')
}
})
更新数据的便捷方式:
更新数据表时,如果数据对象每个属性和数据表的字段一一对应,则可以通过如下方式快速更新数据表:
代码语言:javascript复制//1.要更新的数据对象
const user={id:7,username:'bbb',password:'111'}
//2.待执行的SQL语句
const sqlStr='update users set ? where id=?'
//3.调用db.query()执行SQL的同时,使用数组依次为占位符指定具体值
db.query(sqlStr,[user,user.id],(err,results)=>{
if(err) console.log(err.message)
if(results.affectedRows===1){
console.log('数据更新成功')
}
})
删除数据
在删除数据时,推荐根据id这样的唯一标识,来删除对应的数据:
代码语言:javascript复制//1.要执行的SQL语句
const sqlStr='delete from users where id=?'
//2.调用db.query()执行SQL语句的同时,为占位符指定具体的值
db.query(sqlStr,7,(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows===1){
console.log('数据删除成功')
}
})
注意:如果SQL语句中有多个占位符,则必须使用数组为每个占位符指定具体的值;如果SQL语句中只有一个占位符,则可以省略数组。