扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
给你一个稍微复杂一点的查询,我设计的
创新互联公司是一家集网站建设,昌平企业网站建设,昌平品牌网站建设,网站定制,昌平网站建设报价,网络营销,网络优化,昌平网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
看上图我把第一列标签后面的控件命名有规律,比如计划工厂后面文本框是"计划工厂t",Exapt命名为"计划工厂c",后面还隐藏一个listbox,命名为"计划工厂l"。
计划工厂 这个名称本身就是我要查询的表里面包含的字段。
利用这种界面,我要完成一些复杂点的查询:点文本框里的小图标按钮,弹出工具,可以输入多条件,条件可以成立为模糊条件(用*代替不认识部分),也可以成立为否决条件。
选中Exapt全部否定所成立条件;点击执行按钮,有条件的成立条件,无条件的不成立。
所以这种东西贯穿软件我就不能每个都去做,就只能写一个类文件:
public class conditionset
{
public void load_condit(Panel p)
{
foreach (Control ctl in p.Controls)
{
if (ctl is SkinTextBox)
{
SkinTextBox sktxt = (SkinTextBox)p.Controls[ctl.Name];
ListBox list = (ListBox)p.Controls[sktxt.Name.Substring(0, sktxt.Name.Length - 1) + "l"];
sktxt.IconClick += (Object sen, EventArgs ed) =
{
ctl.condition toolform = new ctl.condition();
if (list.Items.Count 0)
{
sktxt.Text = "┅";
sktxt.ReadOnly = true;
}
foreach (var sm in list.Items)
{
toolform.dv.Rows.Add(sm.ToString());
}
toolform.Show();
toolform.cleari += (Object send, EventArgs er) =
{
sktxt.Text = "";
sktxt.ReadOnly = false;
};
toolform.subm += (Object send, EventArgs er) =
{
list.Items.Clear();
foreach (DataGridViewRow dvr in toolform.dv.Rows)
{
if (Convert.ToString(dvr.Cells[0].Value) != "")
{
list.Items.Add(Convert.ToString(dvr.Cells[0].Value));
}
}
sktxt.Text = "┅";
sktxt.ReadOnly = true;
};
};
}
}
}
public string condit(Panel p)
{
string master_condition = "";
foreach (Control ctl in p.Controls)
{
//遍历panel查找条件
#region
string condition = "";
if (ctl is SkinTextBox)
{
//文本框条件组合
#region
SkinTextBox sktxt = (SkinTextBox)p.Controls[ctl.Name];
string ziduan_name = sktxt.Name.Substring(0, sktxt.Name.Length - 1);
SkinCheckBox skck = (SkinCheckBox)p.Controls[ctl.Name.Substring(0, ctl.Name.Length - 1) + "c"];
ListBox list = (ListBox)p.Controls[ctl.Name.Substring(0, ctl.Name.Length - 1) + "l"];
if (sktxt.Text != "")
{
if (sktxt.Text == "┅")
{
string blur_str = "", blur = "";
foreach (var itm in list.Items)
{
if (itm.ToString().Contains("*"))
{
if (skck.Checked == true)
{
blur += " and " + ziduan_name + " not like '" + itm.ToString().Replace("*", "%") + "'";
}
else
{
blur += " or " + ziduan_name + " like '" + itm.ToString().Replace("*", "%") + "'";
}
}
else
{
blur_str += "'" + Convert.ToString(itm) + "',";
}
}
string blur_sql = (blur == "") ? "" : blur.Substring(4, blur.Length - 4).Trim();
string in_condition = "", like_condition = "";
if (skck.Checked == true)
{
in_condition = ziduan_name + " not in ";
like_condition = " and ";
}
else
{
in_condition = ziduan_name + " in ";
like_condition = " or ";
}
string contains_sql = (blur_str == "") ? "" : in_condition + "(" + blur_str.Substring(0, blur_str.Length - 1) + ")";
condition = contains_sql + blur_sql;
if (blur_sql != "" contains_sql != "")
{
condition = contains_sql + like_condition + blur_sql;
}
else
{
condition = contains_sql + blur_sql;
}
}
else
{
if (!sktxt.Text.Contains("*"))
{
if (skck.Checked == true)
{
condition = ziduan_name + "'" + sktxt.Text + "'";
}
else
{
condition = ziduan_name + "='" + sktxt.Text + "'";
}
}
else
{
if (skck.Checked == true)
{
condition = ziduan_name + " not like '" + sktxt.Text.Replace("*", "%") + "'";
}
else
{
condition = ziduan_name + " like '" + sktxt.Text.Replace("*", "%") + "'";
}
}
}
}
#endregion
}
if (ctl is SkinDateTimePicker)
{
//日期条件组合
#region
if (ctl.Name.Substring(ctl.Name.Length - 1, 1) != "t")
{
SkinDateTimePicker skdate_sta = (SkinDateTimePicker)p.Controls[ctl.Name];
SkinDateTimePicker skdate_end = (SkinDateTimePicker)p.Controls[ctl.Name + "t"];
if (skdate_sta.text != "")
{
if (skdate_end.text == "")
{
condition = skdate_sta.Name + "='" + skdate_sta.text + "'";
}
else
{
condition = skdate_sta.Name + "='" + skdate_sta.text + "' and " + skdate_sta.Name + "='" + skdate_end.text + "'";
}
}
}
#endregion
}
master_condition += (condition == "") ? "" : "(" + condition + ") and ";
#endregion //遍历panel查找条件
}
string condition_sql = (master_condition == "") ? "" : master_condition.Substring(0, master_condition.Length - 5);
return condition_sql;
}
}
工具用一个窗体代替:
public partial class condition : Form
{
public condition()
{
InitializeComponent();
}
public event EventHandler subm;
public event EventHandler cleari;
private void submit_Click(object sender, EventArgs e)
{
subm(sender, e);
this.Dispose();
}
private void clearit_Click(object sender, EventArgs e)
{
this.Dispose();
dv.Rows.Clear();
cleari(sender, e);
}
}
当我们执行多条件的时候就等于拼接条件
SELECT
CASE WHEN (age =20 and age 25) THEN 0
CASE WHEN (age =25 and age =30) THEN 1
ELSE -1 END
FROM student
用case when
case
when 条件1 then 值1
when 条件2 then 值2
else 值3
end
# SELECT 数据查询(二)
## 对查询结果排序 ORDER BY
ORDER BY 关键字主要用来将查询结果中的数据按照一定的顺序进行排序
1. 语法: - `order by 字段名 [asc|desc]`
- 说明 asc 按照升序排序【默认】, desc 按照降序排序
2. 注意:
- ORDER BY 关键字后可以跟子查询 - 当排序的字段中存在空值时,ORDER BY 会将该空值作为最小值来对待
- 当排序的字段中存在空值时,ORDER BY 会将该空值作为最小值来对待查询数据按字母升序进行排序(A Z),但数据的排序并不仅限于此,还可以使用 ORDER BY 中的 DESC 对查询结果进行降序排序(Z A)。
## 条件查询数据 WHERE
如果需要有条件的从数据表中查询数据,可以使用 WHERE 关键字来指定查询条件。
1. 语法 - `WHERE conditons`
- 带比较运算符和逻辑运算符的查询条件
- 带 BETWEEN AND 关键字的查询条件
- 带 IS NULL 关键字的查询条件
- 带 IN 关键字的查询条件 - 带 LIKE 关键字的查询条件
### 单条件查询
### 多条件查询
在 WHERE 关键词后可以有多个查询条件,这样能够使查询结果更加精确。
多个查询条件时用逻辑运算符 `AND()、OR(||)` 或 `XOR` 隔开。
1. AND :记录 满足所有条件,才会被查询出结果
2. OR : 记录 满足任意一个查询条件,才会被查询出结果
3. XOR : 记录 满足其中一个条件,并且不满足另外一个条件是,才会被查询出结果
OR、AND 和 XOR 可以一起使用,但是在使用时要注意运算符的优先级。
### 模糊查询 LIKE [新知识 4me]
1. 语法:
- `[NOT]LIKE`
- NOT :可选参数,字段中的内容与指定的字符串不匹配时满足条件。
- 字符串:指定用来匹配的字符串。“字符串”可以是一个很完整的字符串,也可以包含通配符。
LIKE 关键字支持百分号` % `和下划线` _ `通配符。
#### 带有“%”通配符的查询
“%”是 MySQL 中最常用的通配符,它能代表 **任何长度的字符串** ,字符串的长度可以为 0。
例如,a%b表示以字母 a 开头,以字母 b 结尾的任意长度的字符串。该字符串可以代表 ab、acb、accb、accrb 等字符串。
注意:匹配的字符串必须加 *单引号* 或 *双引号* 。
#### 带有“_”通配符的查询
“_”只能代表单个字符,字符的长度不能为 0。 例如,a_b可以代表 acb、adb、aub 等字符串。
#### LIKE 区分大小写(默认不区分)
默认情况下,LIKE 关键字匹配字符的时候是 不 区分大小写的。如果需要 可以加入`BINARY`关键字
#### 使用通配符的注意事项和技巧
1. 注意事项:
- 注意大小写。MySQL 默认是不区分大小写的。如果区分大小写,像“Tom”这样的数据就不能被“t%”所匹配到。
- 注意尾部的空格 尾部空格会干扰通配符的匹配。例如,“T% ”就不能匹配到“Tom”。
- 注意NULL。”%”通配符可以到匹配任意字符,但是不能匹配 NULL。也就是说 “%”匹配不到 tb_students_info 数据表中值为 NULL 的记录。
2. 使用技巧:
- 不要过度使用通配符,如果其它操作符能达到相同的目的,应该使用其它操作符。因为 MySQL 对通配符的处理一般会比其他操作符花费更长的时间。
- 在确定使用通配符后,除非绝对有必要,否则不要把它们用在字符串的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
- 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。 ** *拓展* ** 如果查询内容中包含通配符,可以使用“”转义符。
*** 2021-12-23 今天先学到这里 明天继续 MySql 的查询 学习
1、创建测试表,
create table test_person(id int, RMB int);
2、插入测试数据
insert into test_person values(1,180);
insert into test_person values(2,170);
insert into test_person values(3,290);
insert into test_person values(4,160);
insert into test_person values(5,299);
insert into test_person values(6,266);
insert into test_person values(7,155);
3、查询表中所有记录,select t.* from test_person t,
4、编写sql,汇总每个vip类型的用户数,
select vip_type, count(distinct id)
from (select case when RMB100 and RMB200 then 'VIP1' when RMB200 then 'VIP2' end as vip_type, id
from test_person) t
group by vip_type
Mysql练习题,可对本章学习的内容进行巩固
dept.sql
emp.sql
salgrade.sql
查询每个员工的工资
给查询列起别名
条件查询需要用到where语句,where语句必须放到from语句后面。
==语法格式如下==
==条件查询支持以下运算符==
==查询工资为5000的员工姓名==
==搭配%使用==
(1)
(2)
(3)
==搭配_使用==
==注意事项==
==连接查询分类==
查询每个员工的部门名称,要求显示员工名和部门名
找出每个员工的工资等级,要求显示员工名、工资、工资等级
找出每个员工的上级领导,要求显示员工名和对应的领导名称
外连接分类
==1、where后面嵌套子查询==
==2、from后面嵌套子查询==
列出各种工作的最低工资及从事此工作的雇员姓名
3、select后面嵌套子查询
查询每个员工所在部门名称
觉得不错的小伙伴可以点赞关注和收藏哦!如有错误可以指出来。
font size="4"Java学习路线目录索引/font
"select id from biao where a='A'" //精确查找
"select id from biao where a LIKE '%A%'" //模糊查找
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流